首页 > 解决方案 > 使用静态信息创建字符串类

问题描述

我想用一些静态模板信息和相同的 std::string 接口创建字符串类。我懒得包装 std::string 所以我试图使用公共继承和构造函数继承:

#include <string>
using std::string;

template <typename Type = uint16_t>
class MyString : public string {
public:
   using string::string;
   using str_len_size = Type;
};

此代码编译没有问题,我无法从 const char* 构造 MyString:

MyString<uint16_t> str{"hello"};//OK

但是当我尝试从 std::string 构造 MyString 或将 std::string 分配给它时,我有一个编译错误:

std::string std_str{"hello"};
MyString<uint16_t> str{std_str};// error: no matching function for call ...

std::string std_str{"hello"};
MyString<uint16_t> str;
str = std_str;// error:  no known conversion for argument 1 from ‘std::string {aka std::basic_string<char>}’ to ‘lottery::base::MyString<short unsigned int>&&’

为什么我不能从 std::string 构造和分配 MyString ,我该如何实现?

我使用编译器 gcc 7.3.1。

标签: c++stringc++11inheritance

解决方案


推荐阅读