在C++中,std::fixed、std::scientific等正确的类型是什么?

4

我试图将 std::fixed, std::scientific 等放到一个变量中,但是无法弄清楚该怎么做。我尝试了这段代码,但它不起作用:

typedef std::vector<std::ios_base> FlagArray;

int main() {
    FlagArray tmp1 = { std::fixed, std::scientific };
    FlagArray tmp2 = { std::internal, std::right, std::left };
    FlagArray tmp3 = { std::uppercase, std::showbase, std::showpoint, std::showpos };
    return 0;
}
1个回答

6
这些操作器的类型是std::ios_base &(std::ios_base &str),它们是函数。

这意味着,您需要使用std::vector<std::ios_base &(*)(std::ios_base &str)> FlagArray;


以下是代码示例:

#include <iostream>
#include <vector>
#include <ios>

typedef std::vector<std::ios_base &(*)(std::ios_base &str)> FlagArray;

int main() {
    FlagArray tmp1 = {std::fixed,std::scientific};
    FlagArray tmp2 = {std::internal,std::right,std::left};
    FlagArray tmp3 = {std::uppercase,std::showbase,std::showpoint,std::showpos};
    return 0;
}

3
建议您使用std::function<std::ios_base&(std::ios_base&)> - myaut
@myaut 我看不出来为什么需要使用它,普通指针已经足够了。 - HolyBlackCat
@myaut:你不能使用流运算符operator<<处理 std::function<...>。这个重载只适用于函数指针。 - Alexandre C.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接