gpt4 book ai didi

c++ - 如何根据定义的字符串类型在 `std::cout`和 `std::wcout`之间进行选择?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:18:13 26 4
gpt4 key购买 nike

我在代码中定义了自己的字符串类型。

typedef wchar_t CharType;
typedef std::basic_string<CharType> StringType;

我有一个静态类(它没有实例),它将在屏幕上打印字符串消息。我决定放置一个 COUT 静态成员,它将根据我定义的字符串类型引用 std::coutstd::wcout

标题:

#include <ostream>

class MyTestClass
{
public:
// ...
static std::basic_ostream<CharType> & COUT;
// ...
}

CPP:

std::basic_ostream<CharType> & MyTestClass::COUT = /* How do I initialize this? */;

有没有办法初始化这个静态成员COUT

最佳答案

这是 C++17 中的一个选项:

#include <iostream>
#include <type_traits>

template <class T>
auto &get_cout() {
if constexpr(std::is_same_v<T, char>){
return std::cout;
}else{
return std::wcout;
}
}

int main() {
{
using CharType = char;
std::basic_ostream<CharType> & MyTestClass_COUT = get_cout<CharType>();
MyTestClass_COUT << "Hello";
}
{
using CharType = wchar_t;
std::basic_ostream<CharType> & MyTestClass_COUT = get_cout<CharType>();
MyTestClass_COUT << L"World";
}
}

如果您没有 C++17,您可以将 if constexpr 替换为基于特征的解决方案。

Demo .

关于c++ - 如何根据定义的字符串类型在 `std::cout`和 `std::wcout`之间进行选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48544573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com