ラムダをテンプレートパラメータとして渡す方法。このコードC++ラムダをテンプレートパラメータに渡す
template<void (*callback)()>
void function() {
callback();
}
int main() {
function<[]() -> void { std::cout << "Hello world\n"; }>();
}
がエラー「コンパイル時の定数式が期待 『関数』の無効なテンプレート引数、」で失敗例えば
。
私は間違っています。私は一例で、この
template<typename T,
T (*deserializer)(buffer *data),
void (*serializer)(T item, buffer *data)>
class Type {
public:
T item;
Type(T item) : item(item) {
}
Type(buffer *data) {
deserialize(data);
}
void serialize(buffer *data) {
serializer(item, data);
}
void deserialize(buffer *data) {
deserializer(data);
}
};
typedef Type<int, [](buffer* data) -> int { return -1; }, [](int item, buffer* data) -> void {}> IntType
typedef Type<long, [](buffer* data) -> long { return -1; }, [](long item, buffer* data) -> void {}> LongType
'std :: for_each()'に従ってみませんか?テンプレート void f(F f){f(); } ' –
私はクラステンプレートでこれを使用する予定です、これは単なるテストコードです。 – KoHcoJlb
私は[その1](http://stackoverflow.com/questions/3810519/how-to-use-a-lambda-expression-as-a-template-parameter)の複製として質問を閉じるつもりでした。しかし質問も答えも恒星はありません... – Quentin