[英]pass method with template arguments to a macro
我无法将 Google Test 的
ASSERT_THROW()<\/code>宏与多个模板参数结合使用。
考虑到我想确保
Matrix<5,1><\/code>的构造抛出:
ASSERT_THROW(Matrix<5,1>(), std::runtime_error);
#define COMMA ,
ASSERT_THROW(Matrix<5 COMMA 1>(), std::runtime_error);
编辑: @tletnes答案更简单,但即使宏参数用作非表达式,这个也会起作用。 例如:
BOOST_FOREACH(std::pair<int COMMA int>& v, myVec) { } // works
BOOST_FOREACH((std::pair<int, int>)& v, myVec) { } // fails
更多编辑:宏COMMA已在boost中定义:
#include <boost/preprocessor/punctuation/comma.hpp>
ASSERT_THROW(Matrix<5 BOOST_PP_COMMA() 1>(), std::runtime_error);
BOOST_FOREACH(std::pair<int BOOST_PP_COMMA() int>& v, myVec) { }
问题是额外的逗号,你需要保护它免受宏。 尝试
ASSERT_THROW((Matrix<5,1>()), std::runtime_error);
#define COMMA,可能无法在GCC中编译。 请改用#define COMMA()。 为什么我不能在其他帖子上添加评论?
除了发布的答案,您还可以尝试
using ColVector5f = Matrix<5,1>;
ASSERT_THROW(ColVector5f(), std::runtime_error);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.