2010-10-25 18 views
0

假設你有一定的模板,需要一個參數類BOOST_ASSERT一個參數類實現一定的方法

template <typename ConnectorClass> 
struct myClass { 

} 

我想添加一個BOOST_ASSERT_MSG來驗證ConnectorClass實現簽名的特定方法

returnType MethodName(param1, param2) 

在這種情況下,我應該如何寫斷言條件?

編輯:因爲這個問題似乎並不有一個明確的解決方案,我張貼基於答案了一些參考資料與中間結果的子問題 請按照here

+2

看看這個:http://stackoverflow.com/questions/3964357/how-to -tell-if-class-contains-a-certain-member-function-in-compile-time – 2010-10-25 15:04:13

回答

0

如果您使用的是Windows,並不太挑剔,你可以通過__if_exists, a hack extension to Visual C++

+0

謝謝,很高興知道。但現在我只能在OS X和Ubuntu上工作 – lurscher 2010-10-25 15:10:03

+0

@lurscher - 如果可能的話,最好還是乾淨一些。這裏有另一個討論可能是有用的:http://programming.itags.org/c-c++/72176/ – 2010-10-25 15:11:40

2

你不能。 BOOST_ASSERT_MSG在運行時期間被評估。如果這個類沒有這個成員,那麼無論你的模板在哪裏,你都會得到一個編譯錯誤。

如果您的目標是更好的錯誤消息,請查看Boost的Concept Check庫。如果您的目標是讓您的模板根據可用的成員做些不同的事情,請查看Boost的enable_if

Here's an answer to a similar question

+0

嗯,我很確定BOOST_ASSERT_MSG是在編譯時評估的,但是我並不知道概念檢查圖書館,值得檢查,謝謝! – lurscher 2010-10-25 15:36:51

+1

您可能正在考慮BOOST_STATIC_ASSERT。 – 2010-10-25 15:53:06

0

查看Boost中的各種靜態斷言實用程序。特別是:

  • BOOST_STATIC_ASSERT(見文檔here
  • BOOST_MPL_ASSERT(見文檔here
相關問題