我有两个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();
}
}
如何解决这种情况?
最佳答案
如果可以使用c++ 17,则可以在满足某些约束的情况下使用if constexpr
有条件地编译代码。
template<typename T>
void someFunction(T obj) {
if constexpr (std::is_same<T, A>::value)
{
obj.aSpecificFunctionToA();
}
// ... code for all Ts
}
在c++ 17之前,您可以对
A
使用重载,并将所有T
通用的代码放入单独的函数中:template<typename T>
void common_code(T obj) {
// ... code for all Ts
}
template<typename T>
void someFunction(T obj) {
common_code(obj);
}
void someFunction(A obj) {
obj.aSpecificFunctionToA();
common_code(obj);
}
关于c++ - 如何检查一个类是否具有特定功能以避免编译时问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63775125/