标准库中的空类型

时间:2013-10-18 11:35:42

标签: c++

有时需要将空类型传递给某个模板。例如:

template <typename X, typename Y> 
struct BoundaryConditions {
  X x; Y y;
  BoundaryConditions(typename X::init xi, typename Y::init yi) : x(xi), y(yi) {
    ...
  }
};

我们可能希望实现不带任何参数的自由边界条件。使用类型检查实现这样的事情非常容易:

struct Nothing {};
Nothing nothing = Nothing();

struct Free {
  typedef Nothing init;
  ...
};

BoundaryConditions<Free, Fixed> foo(nothing, 100);

所以我的问题是:是否实现了类似我的&#34; Nothing&#34;输入标准库或者提升?

4 个答案:

答案 0 :(得分:7)

您可以使用空tuple。与std::tuple<>();

一样

答案 1 :(得分:2)

boost::noneboost::none_t怎么样?

http://www.boost.org/doc/libs/1_54_0/boost/none.hpp

答案 2 :(得分:2)

通常的解决方案是使用void,但这需要对模板进行部分特化(这也是常见的,否则需要更多空间)。

答案 3 :(得分:0)

Boost.MPL提供void_类型。