私は最初にこの簡単な例が機能します(初めてマップを使用します)。名前と値のペアのタイプは、それぞれ関数ポインタへの文字列です。
#include <iostream>
#include <map>
using std::cout;
int foo() {
return 243;
}
int main() {
std::map<std::string, int (*)()> list;
list["a"] = foo;
cout << list["a"](); // 243
}
次に、テンプレートを使用してタイプを指定してみました。マップのインスタンス化でそれが言うところはint
、テンプレートを使用してタイプを指定したいところです。だから私は試しましたが<int>
、関数を呼び出すか、名前と値のペアを作成する場所を正確に知りません。これは私が試したものです:
#include <iostream>
#include <map>
using std::cout;
int foo() {
return 243;
}
int main() {
template <typename N>
std::map<std::string, N (*)()> list;
list["A"] = <int> foo; // right here where you see <int>
cout << list["A"]();
}
私は<int>
正しい場所に置いているとは思わないので、これはうまくいきません。私が得ているエラーは次のとおりです。
/tmp/134535385811595.cpp: In function 'int main()':
/tmp/134535385811595.cpp:11: error: expected primary-expression before 'template'
/tmp/134535385811595.cpp:11: error: expected `;' before 'template'
/tmp/134535385811595.cpp:14: error: 'list' was not declared in this scope
/tmp/134535385811595.cpp:14: error: expected primary-expression before '<' token
/tmp/134535385811595.cpp:14: error: 'N' was not declared in this scope
誰か助けてもらえますか?