我想知道是否可能有模板类,其中只能使用完全匹配的模板类型来调用成员函数?示例:
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?改编模板,我不确定该如何实现。
谢谢
答案 0 :(得分:1)
如果您至少可以使用C ++ 11,则可以delete
具有相同名称的模板方法
template <typename U>
void testMethod (U const &) = delete;
这样,当您使用完全为testMethod()
的值调用T
时,首选not-template方法。当您使用不同类型的值调用testMethod()
时,编译器会选择模板testMethod()
,但会被删除,因此会出现编译错误。