小编Kul*_*ulo的帖子

有没有统一的方法来对齐 C++ 中的控制台输出

我满足了在控制台中对齐输出文本的要求。输出文本存储为std::wstring并编码为UTF-8. 使此任务变得棘手的是,输出文本同时包含 ASCII 字符和日语字符,例如\xe3\x83\x8a5\xe5\x9b\x9e1\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb34a\xe3\x82\xb9F。由于ASCII字符和日文字符的宽度不同,使用setw()或直接无法对齐。\n例如,wprintf(L"%-10s")

\n
#include <iostream>\n#include <iomanip>\nusing namespace std;\nint main(){\n    std::locale::global(std::locale(""));\n    wstring s[] = {L"\xe7\x9f\xad3\xe3\x83\x9e231\xe3\x83\xbc\xe2\x97\x8b",L"\xe3\x81\xae\xe3\x81\x8d3\xe3\x83\xbc\xe3\x83\x8a",L"\xe3\x81\x90\xe3\x83\x9e",L"\xe3\x82\x8d\xe3\x81\xab\xe3\x83\x88"};\n    for(int i=0;i<4;i++)    wcout << setw(10) << s[i] <<123<< endl;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

会像:

\n
    \xe7\x9f\xad3\xe3\x83\x9e231\xe3\x83\xbc\xe2\x97\x8b123\n     \xe3\x81\xae\xe3\x81\x8d3\xe3\x83\xbc\xe3\x83\x8a123\n       \xe3\x81\x90\xe3\x83\x9e123\n      \xe3\x82\x8d\xe3\x81\xab\xe3\x83\x88123\n
Run Code Online (Sandbox Code Playgroud)\n

但如果文本仅包含 ASCII 字符,则它可以正常工作。

\n

我知道我可以自己编写一个新函数来对齐它,但我想知道是否已经有一个可靠的解决方案。

\n

c++ printf wstring

5
推荐指数
0
解决办法
127
查看次数

这个语句在 C++ 概念中意味着什么以及为什么它不起作用

我正在尝试 C++20 功能,并且我想用来concept限制模板仅传递具有名为 的成员List且其类型应该为 的类std::vector<int>。这是前言。

要在不使用 的情况下执行此操作concept,我将编写以下代码:

class RandomClass
{
public:
    std::vector<int> List;
};

typename std::enable_if<std::is_same<decltype(T::List), std::vector<int>>::value>::type
func(T& arg)
{
      ...
}

int main()
{
    auto randomObj= RandomClass();
    func(randomObj);
}
Run Code Online (Sandbox Code Playgroud)

我要求 New Bing 使用concept重写它,它给出了以下内容:

template<class T>
concept HasList = requires(T t) {
    { t.List } -> std::same_as<std::vector<int>>;
};

template<class T> requires HasList<T>
void func(T& arg)
Run Code Online (Sandbox Code Playgroud)

但是这段代码无法编译,编译器给出了'func': no matching overloaded function found.

然后我搜索std::same_as用法并尝试了这个:

template<class T>
concept HasList …
Run Code Online (Sandbox Code Playgroud)

c++ c++-concepts c++20

0
推荐指数
1
解决办法
156
查看次数

标签 统计

c++ ×2

c++-concepts ×1

c++20 ×1

printf ×1

wstring ×1