class Myclass
{
template <typename T>
static T func()
{
T obj;
return obj;
}
template<>
static int func<int>()
{
}
};
私は上記のクラスを書き、コンパイルしようとしました。 私はエラー以下しまっ:ヘッダーファイル内の静的テンプレート化メンバー関数のテンプレート動作のみ
namespace helper
{
template <typename T>
static T func()
{
T obj;
return obj;
}
template<>
static int func<int>()
{
}
}
class Myclass
{
template <typename T>
static T func()
{
helper::func<T>();
}
};
私はエラー以下しまっ:
error: explicit specialization in non-namespace scope 'class Myclass'
error: template-id 'func' in declaration of primary template
は、その後、私はクラスのこのような側面を私の静的関数を外に移動する過程その後
error: explicit template specialization cannot have a storage class
In static member function 'static T Myclass::func()':
I私の専門的な機能をインライン化し、それは働いた。
namespace helper
{
template <typename T>
static T func()
{
T obj;
return obj;
}
template<>
inline int func<int>()
{
return 1;
}
}
class Myclass
{
template <typename T>
static T func()
{
helper::func<T>();
}
};
私の質問は以下のとおりです。)なぜ私たちはクラス内の静的メンバ関数を特化することはできません。
2)静的テンプレートに特化した関数がないのはなぜですか?
@tobiあなたがストーリー全体を見れば、私は静的メンバー機能を専門にすることができなかったヘルパー・コーズを入れなければならないことがわかります。 –
ええ、申し訳ありません。私はそれを全部読んだが、何とか終わりに達したら、私はすでに始まりを忘れていた。申し訳ありません;) – user463035818
ここでの混乱の一部は、「名前空間の範囲」という用語です。これは "名前空間で宣言されたブロックの内部"を意味するものではありません。 「クラス、構造体、共用体、関数などの内部にはない」という意味です。ファイルの先頭は名前空間のスコープです。そこに置かれたものはクラスや何かの代わりに*グローバル名前空間*にあるからです。 –