パラメータイテレータが指すシーケンスの最初のn個の要素の値を、ジェネレータ関数の呼び出しによって返される値に設定するテンプレート関数を実装しています。
私は次のコードを持っています:
template <typename IteratorOut, typename SizeType, typename Generator> IteratorOut createSequence(IteratorOut out, SizeType n, Generator gen) {
std::vector<Generator> vec;
for (SizeType i = 1; i <= n; i++) {
vec.push_back(gen());
}
std::copy(vec.begin(), vec.end(), out);
return out;
}
私は次のように関数をテストしています:
int generate () {
return 5;
}
...
std::vector<int> vec_int;
createSequence(vec_int.begin(), 5, generate);
for (std::vector<int>::iterator iter = vec_int.begin(); iter != vec_int.end(); iter++) {
std::cout << *iter << std::endl;
}
「エラー:'int(*)()'から'int'への無効な変換」が発生します。テンプレート関数の何が問題になっているのかわかりますか?