所以我有以下代码:
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可以直接发布他的解决方案。