我正在尝试专门化模板成员功能。问题是在Debug模式下调用方法的特化,但在Release中调用非专用函数。
例如,我有类模板和专门方法
template <typename T>
class SimpleClass
{
public:
void doSomething(const T& arg)
{
std::cout << "doSomething(const T& arg)" << std::endl;
}
};
template <>
void SimpleClass<double>::doSomething(const double& arg)
{
std::cout << "doSomething(const double& arg)" << std::endl;
}
int main(int argc, char **argv)
{
SimpleClass<double> obj;
obj.doSomething(1);
return 0;
}
我期待,该输出将"doSomething(const double& arg)"
。
所以在调试模式下我得到了它,但在Release中我得到了这个:"doSomething(const T& arg)"
我的问题是为什么代码会以这种方式运行,我该如何解决? 以防万一,我的.pro文件
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
SOURCES += main.cpp \
mathop.cpp
HEADERS += \
mathop.h
编辑:我正在使用Qt 5.9.1
编辑:忘记#include <iostream>
,然后再使用cout
答案 0 :(得分:0)
当您使用整数作为参数调用doSomething()
时,我想编译器只是想在这里找到任意匹配。我不能说为什么调试和发布版本的行为有所不同,但我希望它在调用中明确地使用浮点值时按预期工作:
obj.doSomething(1.0);