【发布时间】:2018-06-25 05:55:48
【问题描述】:
假设我们有一个模板化函数,其中一小部分代码依赖于模板参数类型。从设计 POV(或任何 POV)来看,哪个更好!使用 if else 检查参数类型,使用type_traits(我们可以使用is_same)或模板特化(我们可以把那个小部分放在另一个我们可以特化的函数中)?
template <typename T>
void func(T log) {
// common part
// part dependent on T. We can put this in a separate function which we can specialize.
// or we can do:
// if (std::is_same<T, type1>::value) {
// //code1;
// } else if (std::is_same<T, type2>::value) {
// //code2;
// } else {
// //generic code;
// }
// common part
}
【问题讨论】:
-
请举两个例子。尽量避免提出主要基于意见的问题的印象。
-
在 type 上使用 if-else 总是一个糟糕的选择(它往往会使您的代码变得脆弱并且成为维护的噩梦)。特化、重载或继承/多态总是更好的选择。
-
@Someprogrammerdude 您能否详细说明选择该设计的原因?
-
@Yunnosch 为什么你认为这主要是基于意见的?一个设计要么是好的 XOR 要么是坏的。
-
“一个设计要么是好的 XOR 坏的。” - 错误。不同的应用有不同的考虑。一个对一个人来说很糟糕的设计可能只是另一个人的门票。这就是为什么任何关于设计的讨论都会列出备选方案以及每种方案的优缺点。
标签: c++ templates typetraits