c++ - 如何告诉编译器名称是模板类型名称?
问题描述
例如我得到这样的代码:
#include <iostream>
class Bar {
public:
class Foo {
public:
static void print() {
std::cout << "hello" << std::endl;
}
};
};
template<typename Type, typename MemberType>
class Test {
public:
Test() {
Type::MemberType::print();
}
};
int main() {
Bar::Foo::print();
Test<Bar, Bar::Foo> test;
}
编译时,编译器告诉我no member named 'MemberType' in 'Bar'
,它试图找到文字名称“MemberType”而不是实际名称。
如何解决这个问题?
解决方案
这条线是问题
Type::MemberType::print();
只需将其更改为
MemberType::print();
它会起作用的。
问题是,当您说 时Type::MemberType::print();
,cpp 编译器不会知道您的意思MemberType
是您发送了,它只会在 中搜索它Type
,它会搜索MemberType
而不是Foo
。
推荐阅读
- ios - IOS 启动屏幕故事板以不同的方向显示
- javascript - Discord.js 如何在命令行中使用空格键?
- html - 当我在 bootstarp 4 的容器流体中使用自定义类时,“行”中的对齐项目不起作用?
- mysql - 基于 Node.js 级别(api key)的速率限制
- choroplethr - 使用 Choroplethr 为表格值分配颜色
- java - 获取 XML 注释值
- phpstorm - IntelliJ/PhpStorm:如何搜索“不在路径中”
- java - Docker:无法在 ktor 应用程序中打开从容器到主机的端口
- c - GTK 自定义小部件(按钮):无法在 _init 中设置按钮标签
- mysql - 基于 ID 和日期的 Row_number