如何在派生 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 变量。
- 如何初始化基 class 内联静态数据成员?
- 这样做是个好主意吗?
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;
假设我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 变量。
- 如何初始化基 class 内联静态数据成员?
- 这样做是个好主意吗?
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;