【发布时间】:2012-01-04 23:53:34
【问题描述】:
作为一个实验,我正在尝试根据类模板参数创建一个没有参数的 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()”的调用不明确。不应该只定义这些函数中的一个或另一个,因为除了 !在其中之一?
【问题讨论】:
-
downvoting ...您应该避免更改您的问题以包含我们告诉您的修复程序。它会让每个人感到困惑。请撤消该操作。
标签: c++ c++11 sfinae enable-if