次のコードの結果はどうなりますか?
foo.hという
#include <iostream>
template<class _Tp>
struct Foo
{
void print() { std::cout << "foo\n"; }
};
foo.cxx
#include "foo.h"
template<>
void Foo<int>::print()
{
std::cout << "foo<int>\n";
}
main.cxx
#include "foo.h"
int main()
{
Foo<double>().print();
Foo<int>().print();
return 0;
}
結果が異なっている:
MSVCでコンパイルさ、G ++でコンパイル
foo foo
、
foo foo<int>
私は関係なく、コンパイラの第二の結果を取得したいと思います。達成するために私はさらに何をすべきですか?可能であれば、基礎となる基準や仕組みについて私に説明してください。ありがとうございました!
「次のコードの結果」は、有効なC++コードが含まれていないため、foo.cxxのコンパイルエラーです。 –
私は間違った型を変更しました:void Foo :: void print() - > void Foo :: print()もう一度、ありがとうございます。 –
ヘッダーファイル内の特殊化を宣言するだけで、すべての翻訳単位で表示できるようになります。 'template <> void Foo :: print();'宣言をヘッダーファイルに追加してください。 –