同じように動作するが、実際には型が異なる (つまり、typedef ではない) 単純な POD 構造を多数宣言する必要があります。
とにかく、できるだけシンプルに保ちたいだけです。しかし、テスト中に、コンパイラがいくつかの暗黙的な変換を実行することがわかったので、これを避けたいと思います。
このコードを考えると:
template<typename T>
struct Struct {
T data;
operator T() const { return data; }
};
void fun(Struct<float> value)
{
cout << "Call with Struct :: " << value << endl;
}
void fun(int value)
{
cout << "Call with INT :: " << value << endl;
}
int main(int, char**)
{
fun(3);
fun(4.1f);
fun(Struct<float>{5.2});
fun(Struct<double>{6.3});
return 0;
}
GCC でコンパイルされます。
実行すると、次のようになります。
Call with INT :: 3 // Ok
Call with INT :: 4 // [1]
Call with Struct :: 5.2 // Ok
Call with INT :: 6 // [2]
[1] および [2] の暗黙的な変換を回避するにはどうすればよいですか?
ありがとう