Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.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 - Fatal编程技术网

C++ 对于C++;模板,是否有一种方法可以找到;“有效”;输入?

C++ 对于C++;模板,是否有一种方法可以找到;“有效”;输入?,c++,templates,C++,Templates,我有一个库,其中模板类/函数经常访问输入类型的显式成员,如下所示: template < typename InputType> bool IsSomethingTrue( InputType arg1) { typename InputType::SubType1::SubType2 &a; //Do something } 模板< typename输入类型> 布尔是一个真理( 输入类型arg1){ typename InputType::subtype

我有一个库,其中模板类/函数经常访问输入类型的显式成员,如下所示:

template <
typename InputType>
bool IsSomethingTrue(
  InputType arg1) {

  typename InputType::SubType1::SubType2 &a;

  //Do something

}
模板<
typename输入类型>
布尔是一个真理(
输入类型arg1){
typename InputType::subtype 1::subtype 2&a;
//做点什么
}
这里,
subfit1
subfit2
本身就是用于实例化
InputType
的泛型类型。是否有一种方法可以快速查找库中所有有效的类型,以便传入
InputType
(同样适用于
subtyp1
subtyp2
)?到目前为止,我只是在整个代码库中搜索包含适当成员的类,但是模板输入名称在很多地方被重用,因此非常麻烦


从编码的角度来看,当可能已经定义了有限的有效输入类型集时,使用这样的模板有什么意义?为什么不直接用显式类型重载此函数,而不是使其成为泛型类型?

使用泛型类型的好处不在于模板端:如果您愿意每次都显式地命名它们并编辑模板代码,这是一样的

但是,当您引入模板接受的类型的子类或变体时,会发生什么?另一端无需修改

换句话说,当您说所有类型都是预先知道的时,您排除了代码修改和扩展,这是使用模板的一半意义

从编码的角度来看,当可能已经定义了有限的有效输入类型集时,使用这样的模板有什么意义?为什么不用显式类型重载此函数,而不是使其成为泛型

首先,因为这些超负荷将有完全相同的身体,或者非常相似的身体。如果函数体足够长,那么拥有更多版本是维护的问题。当你需要改变算法时,你现在必须做N次,希望你不会犯错误。大多数时候,冗余是不好的


此外,即使现在可能只有少数这样的类型可以满足函数的语法要求,但将来可能会有更多。有了函数模板,您就可以让算法处理新类型,而无需在每次引入新类型时编写新重载。

为什么需要这样做?我正在尝试将库中选定的函数移植到python;我会直接使用图书馆,但我在一个封闭的平台上工作,在那里建立必要的第三方图书馆是很困难的。