2017-12-07 1 views
0

템플릿 멤버 함수를 특수화하려고합니다. 문제는 디버그 모드에서 메서드의 특수화를 호출하지만 Release에서는 비 전문화 된 함수를 호출한다는 것입니다.Qt Creator : 디버그 및 릴리스 모드에서 클래스 템플릿의 다른 동작

예를 들어, I 클래스 템플릿과 전문적인 방법

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)" 있습니다.

그래서 디버그 모드에서 나는 그것을 가지고 있지만, 릴리스의 나는이있어 : "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

편집을 사용하고 있습니다 : 당신이 정수로 doSomething()를 호출하는 것처럼 cout

+0

당신이에서 mathop.cpp 및 .H을 제거하려고 할 수 있습니다 .pro 파일을 작성하고 main.cpp에 표시되는 코드를 입력하십시오. (현재 코드는 #include가 포함되어 있지 않으므로 컴파일되지 않습니다. ). 나는 당신이 보여주지 않는 코드에 문제가 있다고 생각한다. –

답변

0

를 사용하기 전에 #include <iostream>를 잊어 버렸습니다 매개 변수로, 나는 컴파일러가 단지 여기에 임의의 일치를 찾으려고하는 것 같아요. 디버그 및 릴리스 다르게 동작 빌드 왜 내가 말할 수는 없지만, 명시 적으로 호출의 float 값을 사용할 때 예상대로 작동 기대 :

obj.doSomething(1.0); 
+0

답변 해 주셔서 감사합니다. 그러나 싫어, 나는 이렇게하려고했다 :'double d = 1.0; obj.do 무언가 (d);' –

관련 문제