Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;可变序列的模板和代码生成:如何为每个参数/类型创建类似的代码块?_C++_Templates_Boost_Code Generation_Boost Preprocessor - Fatal编程技术网

C++ C++;可变序列的模板和代码生成:如何为每个参数/类型创建类似的代码块?

C++ C++;可变序列的模板和代码生成:如何为每个参数/类型创建类似的代码块?,c++,templates,boost,code-generation,boost-preprocessor,C++,Templates,Boost,Code Generation,Boost Preprocessor,我想知道我们是否可以有这样的类(伪代码): 模板 上我的课 { 公众: my_类(Arg1T Arg1,std::string Arg1_name…ArgNT ArgN,std::string ArgN_name){} }; 如果我们可以在编译时使用定义为每个提供的参数类型自动生成一个函数,例如获得(伪代码): 模板 上我的课 { 公众: my_类(Arg1T Arg1,std::string Arg1_name…ArgNT ArgN,std::string ArgN_name){} //对于

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

模板
上我的课
{
公众:
my_类(Arg1T Arg1,std::string Arg1_name…ArgNT ArgN,std::string ArgN_name){}
};
如果我们可以在编译时使用定义为每个提供的参数类型自动生成一个函数,例如获得(伪代码):

模板
上我的课
{
公众:
my_类(Arg1T Arg1,std::string Arg1_name…ArgNT ArgN,std::string ArgN_name){}
//对于每个参数,我们希望创建如下函数
ArgMT my_class_函数(std::string name)
{
if(name==ArgM_name)
返回ArgM;
}
};

现代C++中有可能有类似的事情吗? 我想说的是:我想为从某个函数模板提供给构造函数的每个类类型生成函数。不知道怎么做这样的事?这里展示了如何重复提供给类参数和类型的操作


我的意思是,如果我们知道大量的类模板参数(
N
),我们可以创建difrent类型的
N
变量(每个参数一个)和
N
字符串(都是私有的),这样我们就可以创建
N
函数来设置和获取这些变量(字符串+变量)(我们将在构造函数中调用这些变量). 这里的主要问题是-如何解决两次或两次以上获得相同类型的次数,如何从boost.preprocessor获得大量参数,如何过滤相同类型?

您不能仅基于返回类型重载函数,因此不,这是不可能的

如果将参数名和
my_class_函数
从图中删除,则剩下
std::tuple
。然后可以使用
std::get
获取第N个参数(但这完全是编译时构造,在运行时无法确定N)


如果您确实需要运行时处理,那么在N个类型上从
std::string
映射到
boost::variant
可能会起作用。

您不能仅基于返回类型重载函数,因此不,这是不可能的

如果将参数名和
my_class_函数
从图中删除,则剩下
std::tuple
。然后可以使用
std::get
获取第N个参数(但这完全是编译时构造,在运行时无法确定N)


如果您确实需要运行时处理,然后从
std::string
映射到
boost::variant
N种类型可能会起作用。

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

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

请澄清您正在尝试做什么?我现在看到的是基于返回类型的重载函数。请看(和Boost参数库)@sehe:Parameter库似乎很不相关。。。并且不提供任何关于返回类型扫描的帮助。请澄清您试图做什么?我现在看到的是基于返回类型的重载函数。请看(和Boost参数库)@sehe:Parameter库似乎很不相关。。。不提供任何回报帮助types@myWallJSON:
std::tuple
是编译时。如果您想要编译时构造,您不能使用
std::string
。如果我们知道类模板参数(
N
)的数量,我们可以创建difrent类型的
N
变量(每个参数一个)和
N
字符串(所有私有)所以我们可以为字符串nd变量(我们将在构造函数中调用)的setter和getter创建N个函数。这里的主要问题是-当您两次或两次以上获得相同类型时,如何解决时间问题。@myWallJSON:
std::tuple
是编译时。如果您想要编译时构造,您不能使用
std::string
。如果我们知道类模板参数(
N
)的数量,我们可以创建difrent类型的
N
变量(每个参数一个)和
N
字符串(所有私有)所以我们可以为字符串nd变量(我们将在构造函数中调用)的setter和getter创建N个函数。这里的主要问题是——当您两次或多次获得相同类型时,如何解决时间问题。
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;
    }

};