関数 (fn) に char を渡したいと思います。int と short を型キャストしたくありません。したがって、値を MyInt (char のみをサポートする) に暗黙的にキャストしてから、fn に渡す必要があると考えます。これは機能するはずです。bc IIRC では、関数に渡すときに typcast が 1 つだけ許可されます (したがって、char->MyInt は問題ありませんが、int->char->MyInt は問題ありません)。
ただし、 int と char の両方が機能しているように見えるので、別の間接レイヤー(MyInt2)で修正されると思います。現在、それらは両方ともfnに渡すことができません... intではなくcharを渡す方法はありますか?
#include <cstdio>
struct MyInt2{
int v;
MyInt2(char vv){v=vv;}
MyInt2(){}
};
struct MyInt{
MyInt2 v;
MyInt(MyInt2 vv){v=vv;}
};
void fn(MyInt a){
printf("%d", a.v);
}
int main() {
fn(1); //should cause error
fn((char)2); //should NOT cause error
}