gpt4 book ai didi

c++ - 我可以在类中存储构造函数的模板参数吗

转载 作者:行者123 更新时间:2023-12-02 10:22:40 26 4
gpt4 key购买 nike

该类不是模板,只有构造函数是,例如:

struct S{
template<typename LAMBDA>
S(LAMBDA lambda_obj){...};

void f(){
//I want to use lambda_obj here,
//but dont know how to do it
}
};

有什么方法可以将 lambda_obj 存储在结构中,然后稍后在 f() 中使用它?
我不能使 S 成为模板。如果可以的话会容易得多。
我在一次测试中遇到了这个问题,我认为这很有趣。

谢谢你的回答!

最佳答案

如果您知道构建 S 的可调用类型的签名,那么您可以将传递给构造函数的参数存储在 std::function 中,如下所示:

#include <iostream>
#include <functional>

struct S {

std::function<void(void)> func;

template<typename LAMBDA>
S(LAMBDA lambda_obj) {
func = lambda_obj;
};

void f() {
func();
}
};

void DoSomething()
{
std::cout << "foobar\n";
}

int main()
{
S s(DoSomething);
s.f();
}

如果你不知道签名,你可以用可变参数模板和类型删除来做——基本上你可以按照 std::function 本身实现的方式来做,尽管在这种情况下,成员函数 f 必须是函数模板以及构造函数。

关于c++ - 我可以在类中存储构造函数的模板参数吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59434152/

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