在C中实现变量约束
发布时间:2020-12-16 10:15:29 所属栏目:百科 来源:网络整理
导读:我一直在寻找一个示例,展示如何在C中实现约束(或者一个可以让我轻松完成此操作的boost库),但没有太多运气.我能想到的最好的是: #include boost/function.hpp#include boost/lambda/lambda.hpptemplatetypename Tclass constrained{ public: constrained(boo
我一直在寻找一个示例,展示如何在C中实现约束(或者一个可以让我轻松完成此操作的boost库),但没有太多运气.我能想到的最好的是:
#include <boost/function.hpp> #include <boost/lambda/lambda.hpp> template<typename T> class constrained { public: constrained(boost::function<bool (T)> constraint,T defaultValue,T value = defaultValue) { ASSERT(constraint(defaultValue)); ASSERT(constraint(value)); this->value = value; this->defaultValue = defaultValue; this->constraint = constraint; } void operator=(const T &assignedValue) { if(constraint(assignedValue)) value = assignedValue; } private: T value; T defaultValue; boost::function<bool (T)> constraint; }; int main(int argc,char* argv[]) { constrained<int> foo(boost::lambda::_1 > 0 && boost::lambda::_1 < 100,5,10); foo = 20; // works foo = -20; // fails return 0; } 当然,您可能需要从约束类中获得更多功能.这只是一个起点的想法. 无论如何,我看到的问题是我必须重载T定义的所有运算符,以使其真正表现得像T,并且我无法找出它们是什么.现在,我实际上并不需要那么多不同类型的约束,所以我可以省略模板并硬编码.尽管如此,我想知道是否有一般(或至少更多的succint /优雅)解决方案,或者我的方法是否有任何严重错误. 解决方法
看起来很好的例子.但一定要实现所有运算符并以某种方式处理错误的值.
foo = 100; // works ++foo; // should throw an exception or perform an assert 使用boost operators可以帮助您减轻运算符的负担. 也许最好有一个选项作为模板参数:异常或断言. 我会用这样的课.拥有一个自动检查向量范围并进行断言的索引参数总是更好. void foo( VectorIndex i ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读