我有这个工作代码:
#include <iostream>
#include <locale>
struct q: std::numpunct<char>
{
std::string do_grouping() const {return "\3";}
};
int main()
{
std::cout.imbue(std::locale(std::locale(), new q));
std::cout << 1000 << std::endl;
}
我想知道我是否可以内联结构。我试过这个:
#include <iostream>
#include <locale>
int main()
{
std::cout.imbue(std::locale(
std::locale(),
new std::numpunct<char> {std::string do_grouping() const {return "\3";}}
));
std::cout << 1000 << std::endl;
}
但我得到这个错误:
error: no matching function for call to
‘std::numpunct<char>::numpunct(<brace-enclosed initializer list>)’
new std::numpunct<char> {std::string do_grouping() const {return "\3";}}
^~~~~~
这是可能的,如果不是,为什么不呢?
发布于 2018-09-17 15:28:23
正在使用的大括号实际上表示C ++ 11之后的构造函数参数。你要做的是在构造函数参数所在的位置定义一个函数。您要做的是类似于Java匿名类,C ++不支持。
在这种情况下,您必须使用非内联结构定义。
发布于 2018-09-17 16:43:28
您不能内联结构,但可以在本地范围内移动它:
int main()
{
struct Q: std::numpunct<char>
{
std::string do_grouping() const {return "\3";}
};
Q q;
std::cout.imbue(std::locale(std::locale(), &q));
std::cout << 1000 << std::endl;
}
https://stackoverflow.com/questions/-100002659
复制相似问题