Lambda作为typename参数

时间:2016-09-29 12:59:35

标签: c++ lambda c++14 clang++

所以我有以下代码:

enum class UnitType { yearType, monthType, dayType };

struct NoValidation {
        void operator()(int x) const {}
};

template <UnitType U, typename Validator=NoValidation>
class Unit {
        public:
                explicit Unit(int v) : value(v) {
                        Validator()(v);
                }
                int query() const { return value; }
        private:
                int value;
};

auto validateYear = [](int x){
        if(x < 0)
                throw std::invalid_argument("Year is negative");
};

using Year = Unit<UnitType::yearType,decltype(validateYear)>;
using Month = Unit<UnitType::monthType>;
using Day = Unit<UnitType::dayType>;

月和日的声明工作正常,但年没有。

error: no matching constructor for initialization of '(lambda

有什么方法可以修改此代码以使用lambdas吗?不将lambda作为参数传递给构造函数,而是作为模板参数。从理论上讲,lambda只是Functor的语法糖,所以为什么这不起作用呢?

修改 我想打开这个问题,以便@Yakk可以直接发布他的解决方案。

0 个答案:

没有答案