実験として、クラス テンプレート パラメーターに基づいて、パラメーターを変更せずに void メンバー関数を作成しようとしています。
#include <iostream>
#include <limits>
template<typename T>
class MyClass
{
public:
void MyFunc(const typename std::enable_if<std::is_fundamental<T>::value, T> dummy = T());
void MyFunc(const typename std::enable_if<!std::is_fundamental<T>::value, T> dummy = T());
};
template<typename T>
void MyClass<T>::MyFunc(const typename std::enable_if<std::is_fundamental<T>::value, T> dummy)
{
}
template<typename T>
void MyClass<T>::MyFunc(const typename std::enable_if<!std::is_fundamental<T>::value, T> dummy)
{
}
class Simple {};
int main(int argc, char *argv[])
{
MyClass<int> myClass;
myClass.MyFunc();
// MyClass<Simple> myClass2;
// myClass2.MyFunc();
return 0;
}
ただし、エラー: オーバーロードされた 'MyFunc()' の呼び出しがあいまいです。! を除いてすべてが同じであるため、これらの関数のどちらか一方だけが定義されるべきではありません。それらの1つで?