gpt4 book ai didi

可变序列 : How to create similar code block for each argument/type? 的 C++ 模板和代码生成

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:00:31 27 4
gpt4 key购买 nike

我想知道我们是否可以有这样的类(伪代码):

template <class Arg1T, ... class ArgNT>
class my_class
{
public:
my_class(Arg1T Arg1, std::string Arg1_name ... ArgNT ArgN, std::string ArgN_name){}
};

如果我们可以在编译时为每个提供的参数类型自动生成一个函数,例如使用定义来获得类似(伪代码)的东西:

template <class Arg1T, ... class ArgNT>
class my_class
{
public:
my_class(Arg1T Arg1, std::string Arg1_name ... ArgNT ArgN, std::string ArgN_name){}
// for each Arg we want to create a function like
ArgMT my_class_function(std::string name)
{
if(name == ArgM_name)
return ArgM;
}

};

在现代 C++ 中是否可以实现这样/或类似的东西以及如何创建它?

我想说的是:我想为从某个函数模板提供给构造函数的每个类类型生成函数。想知道如何做这样的事情吗?这里显示how to repeat但是如何重复提供给类参数和类型?

我的意思是,如果我们知道类模板参数的数量 (N),我们可以创建不同类型的 N 变量(每个参数一个)和 N 字符串(全部私有(private)),因此我们可以为它的 setter 和 getter 创建 N 函数(字符串 + 变量)(我们将在构造函数中调用)。这里的主要问题是 - 如何解决相同类型两次或更多次的问题,如何从 boost.preprocessor 获取大量参数,如何过滤相同类型?

最佳答案

您不能仅根据返回类型重载函数,所以不,这是不可能的。

如果您使用参数名称和 my_class_function在图片之外,您剩下 std::tuple<T0, ..., Tn> .您可以使用 std::get<N>然后获取第 N 个参数(但这完全是编译时构造,无法在运行时确定 N)。

如果你真的需要运行时处理,那么映射自std::stringboost::variant超过 N 种类型可能有效。

关于可变序列 : How to create similar code block for each argument/type? 的 C++ 模板和代码生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8330950/

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