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