C ++类模板防止成员函数中的隐式转换

时间:2019-01-20 18:27:44

标签: c++ templates

我想知道是否可能有模板类,其中只能使用完全匹配的模板类型来调用成员函数?示例:

template<typename T>
   struct testClass {
   void testMethod(T testParam) {};
};


int main() {
    testClass<int> testObject;
    int testInt;
    testObject(testInt);         //ok
    testObject.testMethod(1.1f); //compile error, parameter is not int
}

基本上是从How do I avoid implicit conversions on non-constructing functions?改编模板,我不确定该如何实现。

谢谢

1 个答案:

答案 0 :(得分:1)

如果您至少可以使用C ++ 11,则可以delete具有相同名称的模板方法

template <typename U>
void testMethod (U const &) = delete;

这样,当您使用完全为testMethod()的值调用T时,首选not-template方法。当您使用不同类型的值调用testMethod()时,编译器会选择模板testMethod(),但会被删除,因此会出现编译错误。