【发布时间】:2017-02-01 18:37:15
【问题描述】:
如何将 lambda 作为模板参数传递。
例如这段代码
template<void (*callback)()>
void function() {
callback();
}
int main() {
function<[]() -> void { std::cout << "Hello world\n"; }>();
}
失败并出现错误“'function' 的模板参数无效,预期的编译时常量表达式”。
我做错了什么。
编辑
我想实现这样的东西
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
【问题讨论】:
-
我打算将它与类模板一起使用,这只是测试代码。
-
我正要以 that one 的副本结束这个问题,但问题和答案都不是很好......