C++ C++;:字符类型的固定大小整数实现

C++ C++;:字符类型的固定大小整数实现,c++,c++11,char16-t,fixed-size-types,char32-t,C++,C++11,Char16 T,Fixed Size Types,Char32 T,我知道在C++11中引入了新的字符类型。但是,由于C++11并非无处不在,因此可能需要为希望使用UTF-16和UTF-32的每个人引入char16\u t和char32\u t。我尝试过实现这样的类型。下面是使用g++和clang++编译的工作实现的基本变体。为简单起见,我对uint8\u t使用typedef,但它也适用于其他类型 template <typename CLASS> class basechar { private: CLASS self; public:

我知道在C++11中引入了新的字符类型。但是,由于C++11并非无处不在,因此可能需要为希望使用UTF-16和UTF-32的每个人引入
char16\u t
char32\u t
。我尝试过实现这样的类型。下面是使用g++和clang++编译的工作实现的基本变体。为简单起见,我对
uint8\u t
使用typedef,但它也适用于其他类型

template <typename CLASS>
class basechar
{
private:
  CLASS self;
public:
  ~basechar()
  {}

  basechar()
  : self(0) {}

  basechar(const CLASS& object)
  : self(object) {}

  inline operator CLASS() const
  { return self; }

  friend std::ostream&
  operator<<(std::ostream& sstream, const basechar<CLASS>& object)
  { sstream << (uint32_t)(uint8_t)(object.self); return sstream; }
};

int main()
{
  typedef basechar<uint8_t> bchar;
  const char* array = "AZbyCX";
  const bchar* barray = reinterpret_cast<const bchar*>(array);
  for (size_t i = 0; i < 4; ++i)
  {
    std::cout << (uint32_t)(uint8_t)array[i] << std::endl;
    std::cout << barray[i] << std::endl;
  }
  return 0;
}
由于这可能不是定义良好的行为,我想问:是否有可能在不同的编译器上实现这种可移植的特性?我希望能够在
uint16\u t
mychar16\u t
类型的函数中重载


多谢各位

基本上所有平台都已经有了这些类型,但它们是特定于平台的。我建议您这样做:
#如果PLATFORM1 typedef char16\u不需要任何东西#elif PLATFORM2 typedef char16_t某物#endif
@Dave-typedefs应该反过来。如前所述,它们定义了
任何东西
某些东西
。编写没有适当缩进的代码不是很有趣吗<代码>
65
65
90
90
98
98
121
121