繁体   English   中英

将带有模板参数的方法传递给宏

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM