带有重载的朋友模板结构声明

时间:2016-10-29 17:14:38

标签: c++ c++11 templates c++14 friend

考虑以下代码段:

namespace nr {

  template <class ...> using void_t = void;

  template <typename T, typename = void> struct type_id {
    static int const value = 0;
  };
  template <typename T> struct type_id<T, void_t<decltype(T::type_id)>> {
    static int const value = T::type_id;
  };

}

现在我想让重载能够访问私有type_id静态字段。我找不到正确的语法或者是否可能。我在下面的尝试提供0而不是已执行的1。如果您宣布1成员公开,则会获得type_id = 1

class Foo {
  template <typename T, typename> friend struct nr::type_id;
  static const int type_id = 1;
};

int main() {
  std::cout << nr::type_id<Foo>::value << std::endl;
}

这是可能的,如果是的话,怎么样?

0 个答案:

没有答案