私はC++クラステンプレートの問題を調査しています。 1つのクラステンプレートは特殊ですが、コンパイラーは常に特殊化の使用を選択するとは限りません。私は、コンストラクタの引数は、(問題が簡単な引数では発生しません)かなり複雑であるため、問題を示すサンプルを作成するために管理していないテンプレートクラスの特殊化はコンストラクタ引数に依存しますか?
temlate <class T>
class MyClass { /*some constructors*/ };
template<>
class MyClass <int>
{ void foo(); /*some constructors*/}
MyClass<int> test1;
test1.foo(); //works
MyClass<int> test1("hallo");
test1.foo(); //doesn't work (foo does not exist, compiler uses unspecialized version.)
:私は、コンストラクタの引数は、この影響を与えるように見えることがわかりました。
私の質問は単純に:これは、コンストラクタの引数がコンパイラの選択に影響する可能性はありますか?どうやって?
私は、Visual C++で2008年おかげでたくさん働いています
!
---- EDIT:テンプレートの特殊化は、我々が構築する静的ライブラリ内のすべての翻訳単位の一部ではなかった場合は、問題が発生し、:
我々は問題を特定しているように思えます。しかし、他の翻訳単位がなければ、それは消えます。
私はhttp://codeidol.com/cpp/cpp-templates/Instantiation/Implementation-Schemes/を見つけました。欲張りな実装では、私たちが観察した現象を説明することができます。
MSVCとGCCが実際にどの実装体系を使用しているかは誰にも分かりますか?
完全なテストケースを表示してください。 –
「うまくいかない」とはどういう意味ですか? –
@ Philipp: コンストラクタの引数が の特殊化の選択に影響することは考えにくいです。エラーメッセージを投稿できますか? 私は今考えることができるのは、変数定義が、 構文解析のために 'MyClass 'を返す関数宣言のように解析されているということです。 –