首页 > 解决方案 > 如何告诉编译器名称是模板类型名称?

问题描述

例如我得到这样的代码:

#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”而不是实际名称。

如何解决这个问题?

标签: c++templates

解决方案


这条线是问题

Type::MemberType::print();

只需将其更改为

MemberType::print();

它会起作用的。

问题是,当您说 时Type::MemberType::print();,cpp 编译器不会知道您的意思MemberType是您发送了,它只会在 中搜索它Type,它会搜索MemberType而不是Foo


推荐阅读