如何告诉编译器名称是模板类型名称?

时间:2019-12-02 08:53:09

标签: c++ templates

例如,我得到了如下代码:

#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”。

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

这行是问题

OrdinalIgnoreCase

只需将其更改为

Type::MemberType::print();

它将起作用。

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

相关问题