私はCodeReview.SEで私の質問に与えられた答えを実装しようとしています。基本的に、テンプレート化された構造体のいくつかの静的変数にアクセスしたいと思います。次のサンプルコードについて考えてみます。
#include <iostream>
using namespace std;
template<const int idx>
struct Data{
static int bar;
};
template<const int idx>
int getBar(){
return Data<idx>::bar;
}
int main() {
const int n = 2; // Arbitrary number
cout << getBar<n>();
return 0;
}
コンパイラは、私Data<n>
がプログラムで使用できるようにしたいことを認識しませんgetBar<n>
が、エラーメッセージから明らかなように、初期関数を問題なく認識します。
undefined reference to `Data<2>::bar'
テンプレート化された構造体も利用できるようにコンパイラーに指示するにはどうすればよいですか?
静的クラス変数にはメモリ割り当てを指定する必要があります。これを追加:
template<const int idx>
int Data<idx>::bar = 0;
編集:NathanOliverによってリンクされた複製が頭に当たるが、テンプレート化されていないクラスの場合。この回答は、クラスがテンプレート化されている場合の構文を示しています。わずかな違いですが、それでも便利です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加