c++ - 如何检查对象是否是 C++ 中模板类的实例?
问题描述
如何在不知道模板参数的情况下检查变量是否为模板类,所以在下面的示例中,我如何确定(证明)A<int> 是 A。
template <class T>
class A {/*----*/};
int main() {
auto a1 = A<int>();
bool is_a1_an_A = some_method(a1, A);
}
任何帮助是极大的赞赏。谢谢!
解决方案
使用专门的辅助类非常简单:
#include <type_traits>
#include <iostream>
template<typename T> class A {};
template<typename T>
struct is_a : std::false_type {};
template<typename T>
struct is_a<A<T>> : std::true_type {};
int main()
{
auto a1=A<int>{};
bool b1=false;
std::cout << is_a<decltype(a1)>::value << std::endl;
std::cout << is_a<decltype(b1)>::value << std::endl;
return 0;
}
is_a
专门用于模板参数,该参数是A
. 非特化版是假特质,特化版是真特质,差不多就是这样。如果您不熟悉模板专业化的主题,这是一个相当复杂且深入的主题,应该在每一本优秀的 C++ 教科书中都有完整的解释,我推荐您在那里对这个主题进行全面而完整的讨论。
推荐阅读
- r - windows10无法正确安装Rtools
- unity3d - Gradle 在 Unity 中构建错误并出现错误无法获取未知属性“unityStreamingAssets”
- java - 在 Spring Boot 中使用模拟存储库测试 void 服务方法?
- javascript - html / css / javascript 悬停文本'字典'
- jenkins - 使用文件参数远程触发 jenkin 作业
- java - 我如何获得输出字符串之类的输出?
- python - 如何获取文本 BeautifulSoup
- django - Django:遍历所有对象填充所有内存
- c++ - 如何编写利用 ADL 的概念
- python - 在 groupby 函数之后找到两列的最大乘积