gpt4 book ai didi

c++ - 避免使用带有默认参数的类模板的括号

转载 作者:可可西里 更新时间:2023-11-01 15:24:39 26 4
gpt4 key购买 nike

我有一个类似于下面的类模板,旨在包含解析 CSV 文件时使用的一些配置设置:

template <typename InputIterator = default_all>
class icsv_params
{
// Iterator to a data structure containing the columns
// that should be read.
typedef InputIterator iterator;
// This is a bitmask type.
typedef detail::icsv_op icsv_op;

static const icsv_op noqt = icsv_op(detail::csv_flags::noqt);
static const icsv_op quot = icsv_op(detail::csv_flags::quot);
static const icsv_op mmap = icsv_op(detail::csv_flags::mmap);

// The rest of the class definition isn't relevant.
};

现在,当用户希望向包含应解析的列数的数据结构提供开始和结束迭代器时,模板参数很重要;但是,如果用户未能提供迭代器作为参数,则该类应自动假定所有列都应被解析。

在第二种情况下,声明类实例的代码看起来很笨拙:

icsv_params<> params(...);

此外,位掩码类型 noqtquotmmap 仅供此类使用,因此将它们放在内部是有意义的类定义;然而,如果用户希望使用这些位掩码类型,这样做的代码也很笨拙:

icsv_params<> params(icsv_params<>::noqt);

我怎样才能使用户不需要提供尖括号来指示缺少模板参数?如果没有办法这样做,您会建议什么替代方案?

最佳答案

不幸的是,这是 C++ 语法。 IIRC,在 C++0x 中,有关联的命名空间(这解决了你的第二个问题)。

对于第一个,typedef 应该可以,à la STL:

template <typename InputIterator = default_all>
class basic_icsv_params
{
...
};

typedef basic_icsv_params<> icsv_params:

关于c++ - 避免使用带有默认参数的类模板的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6812389/

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