[英]C++11 : typedef std::function and argument on itself
這是我想做的事情:
typedef std::function<void(const callback&)> callback;
(即:定義一個std :: function,它可以作為第一個arg傳遞一個與自身相同類型的對象)。
但是這不會編譯(解析參數時不知道回調,即使編譯器知道arg的大小,因為它是const ref)
有沒有人知道某種黑客(可能有模板?)比我使用的那種更難看:
struct scallback;
typedef std::function<void(const scallback&)> callback;
struct scallback { callback value; };
這是“丑陋的”因為我必須直接使用arg.value而不是arg ..
注意:我必須使用std :: function而不是C-Like指針,防止使用void *和cast。 謝謝
短發
你是對的。 此類型尚不清楚,因為尚未定義。 它正處於被定義的中間。
您可以嘗試從std::function<>
繼承一個新類,而不是對它進行類型別名。 與CRTP類似,您將能夠在父類模板實例化中引用子類名稱,並且由於C ++ 11,您將能夠在一個簡單的行中導入所有構造函數 。
這似乎有效 :
#include <functional>
struct callback : std::function<void(const callback&)> {
using std::function<void(const callback&)>::function;
};
void test(const callback& cb) {}
int main() {
callback cb = test;
test(cb);
return 0;
}
這就是我所擁有的似乎更好的東西:
struct callback_arg;
typedef std::function<void(const callback_arg&)> callback;
struct callback_arg : callback // callback_arg can be seen as a callback
{
// callback can be seen as a callback_arg
callback_arg(const callback& a) : callback(a)
{
};
};
void Foo(const callback& val) {};
void Fuu(const callback& val) {};
int main()
{
callback foo = Foo;
callback fuu = Fuu;
foo(fuu); // compiles correctly
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.