如何在派生 class 中初始化基 class 静态内联数据成员?

How to init base class staic inline data member in derived class?

假设我class喜欢

#include<iostream>
#include<string>

template<typename CharT>
class base
{
   //.....
public:
   using string_type = std::basic_string<CharT>;
   static inline string_type var;
   //.....
};

class derived : public base<char>
{
private:
   using base<char>::var;
public:
   static base<char>::string_type get()
   {
      return var;
   }
};

//template<>
//base<char>::string_type base<char>::var = "Value";

int main()
{
   std::cout << derived::get();
}

base class 接受 char 类型并为该 class 创建一个字符串类型,但我想在class,所以我创建了一个 static string_type 变量,必须由 class 的用户设置。

char 的值为 "Value"wchar_t 的值为 L"Value"。所以我想通过继承指定类型(char)中的 class 来隐藏用户的 var 现在如何初始化 var.

我试过删除 inline 并取消注释它工作的模板,但有一种方法可以初始化 inline static 基础 class 变量。

  1. 如何初始化基 class 内联静态数据成员?
  2. 这样做是个好主意吗?

How to init base class inline static data member?

去掉inline你应该是able to initialize the var

template<typename CharT>
class base
{
public:
   using string_type = std::basic_string<CharT>;
   static string_type var;
   // ^^^^^^^^^^^^^^^^^^^
};

template<>
base<char>::string_type base<char>::var = "Value";

template<>
base<wchar_t>::string_type base<wchar_t>::var = L"Value";

It is a good idea doing like this?

不确定设计。因为你在这里提到的

"I want to hide the var from a user by inheriting the class in specified type(char) [...]"

看来,还是可以通过

访问的
std::cout << base<char>::var;