如何初始化无法访问的模板类的静态成员?

时间:2017-06-20 22:26:04

标签: c++ templates clang

我的代码类似于以下代码,其中类模板具有需要初始化的静态变量。然后我有一个模板类typedef,它使用私有的内部类作为模板参数:

erf()

我以为我可以像这样初始化静态变量:

template <typename T>
class Foo
{
private:
  static const char* s_name;
};

class Bar
{
private:
  class Baz
  {
  // ...
  };

  typedef Foo<Baz> FooBaz;
};

它在MS Visual Studio 2015中有效。但是,当我使用clang构建时,我收到如下错误:

template<>
const char* Foo<Bar::Baz>::s_name = "foobaz";

为什么这适用于MSVS,但不是铿锵声?有没有办法初始化这个适用于它们的变量?

2 个答案:

答案 0 :(得分:0)

制作&#34; typedef Foo FooBaz&#34;公共场所&#34; Bar&#34;并使用&#34; Bar :: FooBaz :: s_name&#34;。

答案 1 :(得分:0)

如果您不关心部分实例化,您可以随时使用它。

template<typename T>
   const char *  Foo<T>::s_name = "foo";

对于偏爱你需要让Foo成为Bar的朋友。

class Bar
{
private:
    class Baz {
       // ...
    };
    friend class Foo<Baz>;

    typedef Foo<Baz> FooBaz;

};
template<>
    const char * Foo<Bar::Baz>::s_name = "barbaz";