2

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

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++ 中是否可能有这样/或有点类似的事情以及如何创建它?

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

我的意思是,如果我们知道类模板N参数N的数量NN变量)(我们将在构造函数中调用)。这里的主要问题是 - 如何解决两次或更多相同类型的问题,如何从 boost.preprocessor 中获取 args 数量,如何过滤相同类型?

4

2 回答 2

0

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

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

如果您确实需要运行时处理,那么从N 类型std::stringboost::variantN 类型的映射可能会起作用。

于 2011-12-02T09:51:35.863 回答
0

我认为在这种情况下,您通常可以使用接口和工厂方法。

于 2011-12-09T20:08:57.597 回答