2017-12-07 31 views
0

テンプレートメンバ関数を特殊化しようとしています。問題は、デバッグモードではメソッドの特殊化が呼び出されますが、Releaseでは非特殊化された関数が呼び出されるという点です。Qt Creator:デバッグモードとリリースモードでのクラステンプレートの動作が異なります

は例えば、私はクラステンプレートと専門方法

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.doSomething(d); ' –

関連する問題