首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Struct literal作为函数参数?

Struct literal作为函数参数?
EN

Stack Overflow用户
提问于 2018-09-17 07:13:30
回答 2查看 0关注 0票数 0

我有这个工作代码:

代码语言:javascript
运行
复制
#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;
}

我想知道我是否可以内联结构。我试过这个:

代码语言:javascript
运行
复制
#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;
}

但我得到这个错误:

代码语言:javascript
运行
复制
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";}}
                              ^~~~~~

这是可能的,如果不是,为什么不呢?

EN

回答 2

Stack Overflow用户

发布于 2018-09-17 15:28:23

正在使用的大括号实际上表示C ++ 11之后的构造函数参数。你要做的是在构造函数参数所在的位置定义一个函数。您要做的是类似于Java匿名类,C ++不支持。

在这种情况下,您必须使用非内联结构定义。

票数 0
EN

Stack Overflow用户

发布于 2018-09-17 16:43:28

您不能内联结构,但可以在本地范围内移动它:

代码语言:javascript
运行
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100002659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档