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;我会直接使用图书馆,但我在一个封闭的平台上工作,在那里建立必要的第三方图书馆是很困难的。