gpt4 book ai didi

C++11:typedef std::function 和参数本身

转载 作者:太空狗 更新时间:2023-10-29 21:19:31 27 4
gpt4 key购买 nike

这是我想做的:

typedef std::function<void(const callback&)> callback;

(即:定义一个 std::function,它可以作为第一个 arg 传递与其自身相同类型的对象)。

但是这不会编译(在解析参数时不知道回调,即使编译器知道 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* 和强制转换。谢谢

鲍勃

最佳答案

你是对的。该类型此时未知,因为它尚未定义。正在定义中。

您可以尝试从std::function<> 继承一个新类而不是对其进行类型别名。您将能够在父类模板实例化中引用子类名称类似于 CRTP感谢 C++11,你将能够 import all constructors简单的一行。

seems to work :

#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;
}

关于C++11:typedef std::function 和参数本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27002263/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com