我找不到任何文档,也没有在进行Google搜索时看到的任何相关信息:
我具有要产生以下特征的功能:
(void)(int,int)
所以当我运行这两个函数时:
void dosomething(int x, int y);
void dosomethingwront(float x, float y);
通过:
// Should succeed
boost::BinaryFunction<dosomething,void,int,int>
// Should fail
boost::BinaryFunction<dosomethingwrong,void,int,int>
编译失败,因为它不喜欢第一个参数类型。不幸的是,我不确定文档中<class Func,...>
的含义。如果我具有这两个功能,该如何测试这些概念?
谢谢
答案 0 :(得分:1)
模板参数必须是类型。
您可以使用decltype((dosomething))
。请注意,您的概念不会因dosomethingwront
而失败,因为int
可转换为float
,并且该概念会检查二进制函数是否可通过{{1}调用 },而不是检查功能签名。
int
如果要基于函数参数严格检查此概念,则可以使用基于显式模板专门化的类型特征来进行检查。以下内容并未穷尽所有可能的const和volatile限定。
#include <boost/concept_check.hpp>
void dosomething(int x, int y);
void dosomethingwront(float x, float y);
int main() {
BOOST_CONCEPT_ASSERT((boost::BinaryFunction<decltype((dosomething)),void,int,int>));
BOOST_CONCEPT_ASSERT((boost::BinaryFunction<decltype((dosomethingwront)),void,int,int>));
}