gpt4 book ai didi

c++ - 我应该在这些模板参数中为此函数调用些什么?

转载 作者:行者123 更新时间:2023-12-02 09:47:40 25 4
gpt4 key购买 nike

我想知道如何调用该函数,这是第三个示例,其中的函数不能衰减为函数指针?

class SimpleClass 
{public:
SimpleClass(int i, float f, const char* c) {}
};

template <typename TGet, typename TSet>
class TemplatedClass
{public:
TemplatedClass(int i, float f, TGet getter, TSet setter, const char* name) {}
};


class Creator
{public:
template <typename T, typename ... TArgs>
static T* create(int i, float f, TArgs ... args)
{
return new T(i, f, args...);
}

};

int main()
{
Creator::create<SimpleClass>(7, 0.f, "Name"); // WORKS

Creator::create<TemplatedClass< const char* (*)(), void (*)() >>(
7,
0.f,
[]() { return "Called Getter"; },
[]() { std::cout << "Called Setter"; },
"Name"); // WORKS

int captureMe = 3;

Creator::create<TemplatedClass< ? , ? >>(
7,
0.f,
[]() { return captureMe; },
[]() { std::cout << captureMe; },
"Name"); // ???
}

最佳答案

首先,您的lambda捕获captureMe,因此您需要指定默认捕获模式或自己捕获它。例如,使用[&]而不是[]
然后,如果将lambda保存到类似以下的变量中:

const auto x = [&]() { return captureMe; };
const auto y = [&]() { std::cout << captureMe; };
然后,您可以使用 decltype引用它们的类型:
Creator::create<TemplatedClass<decltype(x), decltype(y)>>(
7,
0.f,
x,
y,
"Name");

关于c++ - 我应该在这些模板参数中为此函数调用些什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64235199/

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