c++ - 使用模板模板参数专门化基类
问题描述
我猛烈抨击以下代码:
template<class... Ts> struct typelist{};
template<class S> struct Fun;
template<template<class...> class S, class... Ts>
struct Fun<S<Ts...>> {
std::tuple<Ts...> _fun;
};
template<class S, class P> struct Gun;
template<template<class...> class S, class... Ts, class P>
struct Gun<S<Ts...>, P>: Fun<S<Ts...>>{
auto hun(){
std::cout << std::get<0>(_fun); // error: use of undeclared identifier '_fun'
}
};
auto main(int /*argc*/, char* /*argv*/[])-> int {
auto gun = Gun<typelist<int>, float>{};
gun.hun();
return 0;
}
我不明白这里发生了什么以及为什么会出现该错误。一定有什么明显的我没看到...
解决方案
请注意,基类依赖于模板参数,并且_fun
是一个非依赖名称,不会在依赖的基类中查找。
您可以使名称_fun
依赖,然后在实例化时查找它;那时,确切的基础专业化是已知的。
例如
std::cout << std::get<0>(this->_fun);
// ~~~~~~
std::cout << std::get<0>(Fun<S<Ts...>>::_fun);
// ~~~~~~~~~~~~~~~
推荐阅读
- c# - C#:(错误 CS1526:新表达式在类型后需要参数列表或 ()、[] 或 {})如何解决此问题?
- reactjs - 无法将 id 分配给从 firebase 实时数据库中获取的数据
- amazon-web-services - 在 lambda 测试中通过 Secret 控制台旋转 Secret 时出现以下错误:
- python - postgres 数据库中的芹菜任务结果是字节格式?
- c# - MongoDB如何检查整数值是否增加?
- algorithm - 算法比中间相遇更好
- javascript - 数组中连续数字的总和
- c - 在 win32 应用程序中使用不同的字体
- django - 如何通过 html 模板打印出多个查询的对象
- c - 如果 struct 及其包含的结构不是由原始类型组成,则如何评估大小。如何正确使用它