[解決済み] 非名前空間スコープでの明示的な特殊化 [重複].
2022-05-26 21:06:03
質問
template<typename T>
class CConstraint
{
public:
CConstraint()
{
}
virtual ~CConstraint()
{
}
template <typename TL>
void Verify(int position, int constraints[])
{
}
template <>
void Verify<int>(int, int[])
{
}
};
これをg++でコンパイルすると、以下のようなエラーが発生します。
名前空間でないスコープ 'class CConstraint' での明示的な特殊化
VCでは、問題なくコンパイルできます。どなたか回避策を教えていただけませんか?
どのように解決するのですか?
VC++ はこの場合、非準拠です。明示的な特殊化は、名前空間スコープでなければなりません。C++03, §14.7.3/2 :
明示的な特殊化は、テンプレートがメンバである名前空間、またはメンバテンプレートの場合は、包含するクラスまたは包含するクラステンプレートがメンバである名前空間で宣言されなければならない。
クラステンプレートのメンバ関数、メンバクラス又は静的データメンバの明示的な特殊化は、クラステンプレートがメンバである名前空間で宣言されなければならない。
さらに、C++03 により、含むクラスを明示的に特殊化することなくメンバ関数を特殊化できないという問題があります。
§14.7.3/3
のため、1 つの解決策として
Verify()
を、おそらく特殊な、自由関数に転送することです。
namespace detail {
template <typename TL> void Verify (int, int[]) {}
template <> void Verify<int>(int, int[]) {}
}
template<typename T> class CConstraint {
// ...
template <typename TL> void Verify(int position, int constraints[]) {
detail::Verify<TL>(position, constraints);
}
};
関連
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】'std::cout'への未定義の参照