【发布时间】:2014-11-18 19:20:56
【问题描述】:
这是我想做的:
typedef std::function<void(const callback&)> callback;
(即:定义一个 std::function 可以作为第一个参数传递一个与其自身相同类型的对象)。
但是这不会编译(回调在解析参数时不知道,即使编译器知道 arg 的大小,因为它是一个 const ref)
有没有人知道某种 hack(可能使用模板?)比我使用的那个更丑:
struct scallback;
typedef std::function<void(const scallback&)> callback;
struct scallback { callback value; };
这很“丑陋”,因为我必须使用 arg.value 而不是直接使用 arg..
注意:我必须使用 std::function 而不是 C-Like 指针,以防止使用 void* 和强制转换。 谢谢
鲍勃
【问题讨论】:
-
出于好奇,什么样的回调将自己作为参数?
-
如果你得到了你想要的,你的第一行将导致无穷无尽的递归 typedef...
-
如果你试图转发声明一个结构,
const struct scallback&就可以了。但是我不明白为什么你需要它是同一个名字。我闻到了 X 和 Y 问题。 -
@Cameron : 回调不会调用自己,而是调用另一个相同类型的对象
-
@Read Alert:可以定义一个类 A,其函数成员以 const 类和 A(或 A*)为参数
标签: c++ c++11 typedef forward-declaration std-function