簡體   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