我想知道我们是否可以有这样的类(伪代码):
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::string
至 boost::variant
超过 N 种类型可能有效。
关于可变序列 : How to create similar code block for each argument/type? 的 C++ 模板和代码生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8330950/