c++ - 如何检查一个类是否具有特定功能以避免编译时问题?
问题描述
我有两个 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之前,可以使用for的重载A
,将所有T
s共有的代码放到单独的函数中:
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);
}
推荐阅读
- python - 导出由子流程解决和选择的路径的方法
- r - 在 R 工作室中,我收到一个带有交互的双向 ANOVA 的事后测试 TukeyHSD 错误
- python - 在 Amazon Linux 实例上运行 python 脚本时出现库错误
- mysql - 使用存储过程从不同的临时表更新主表 - MySQL
- html - 您如何使用 html 和 css 进行有条件的垂直换行
- python - 如何压缩python for循环
- c++ - Coverity 抱怨 htonl 操作数,但为什么呢?
- linux - 在我的 Mac 上删除 Anaconda 时遇到问题
- javascript - 使用缩放在 p5.js 中翻转图像
- github - 为什么我的 gh-pages 的 unfurl 'og:image' 没有出现在任何平台上?