【发布时间】:2020-12-25 17:32:25
【问题描述】:
我有两个 A 类和 B 类,有一个共同的函数对它们进行一些操作,只是略有不同。
我尝试使用 std::is_same,但看起来它不会阻止编译时问题。
class A {
public:
void aSpecificFunctionToA() {
}
};
class B {
};
template<typename T>
void someFunction(T obj) {
if(std::is_same<T, A>::value)
{
obj.aSpecificFunctionToA();
}
}
如何解决这种情况?
【问题讨论】:
-
你需要一个constexpr if
-
也就是说,这通常是糟糕的设计。考虑将函数重载用于特定类型的东西。
-
@Someprogrammerdude 你能明确说明为什么这是一个糟糕的设计吗?因为它不是 API 的一部分,它可能会让用户感到惊讶。
-
我使用的函数代码很长,变化仅针对 1 个特定函数。我想再次编写整个代码将是一个糟糕的设计,因为代码将是多余的。如果我错了,请纠正我。
-
@MartinMorterol 对类型的显式选择(如问题中所示)可能很快变得棘手,难以阅读和理解,因此也难以维护。使用语言本身的类型选择(重载)使代码更清晰、更干净、更易于维护。
标签: c++ c++11 templates compiler-errors