我想創建一個構造函數,它需要可變數量的參數,我非常想保持類型安全。 我搜索了一遍,並不斷找到「虛擬變量」這個詞(例如:http://msdn.microsoft.com/en-us/library/hh567368.aspx) 但是我找不到任何如何使用這些虛擬變量的例子,我想避免直接看std :: tuple的源文件。在Visual Studio 2012中的虛擬變量
那麼有沒有人知道這些虛擬變量的一個相對簡單的例子?使用BOOST_PP_REPEAT
一個簡單的示例:
我想創建一個構造函數,它需要可變數量的參數,我非常想保持類型安全。 我搜索了一遍,並不斷找到「虛擬變量」這個詞(例如:http://msdn.microsoft.com/en-us/library/hh567368.aspx) 但是我找不到任何如何使用這些虛擬變量的例子,我想避免直接看std :: tuple的源文件。在Visual Studio 2012中的虛擬變量
那麼有沒有人知道這些虛擬變量的一個相對簡單的例子?使用BOOST_PP_REPEAT
一個簡單的示例:
您還可以使用升壓預處理庫做到這一點
#include <boost/preprocessor/repetition.hpp>
#include <boost/preprocessor/arithmetic/sub.hpp>
#include <boost/preprocessor/punctuation/comma_if.hpp>
#define TINY_print(z, n, data) data
#define TINY_size(z, n, unused) \
template <BOOST_PP_ENUM_PARAMS(n, class T)> \
struct tiny_size< \
BOOST_PP_ENUM_PARAMS(n,T) \
BOOST_PP_COMMA_IF(n) \
BOOST_PP_ENUM( \
BOOST_PP_SUB(TINY_MAX_SIZE,n), TINY_print, none) \
> \
: mpl::int_<n> {};
BOOST_PP_REPEAT(TINY_MAX_SIZE, TINY_size, ~)
#undef TINY_size
#undef TINY_print
鏈接到官方文檔:http://www.boost.org/libs/預處理器/ – ildjarn
現在你也可以使用十一月CTP和嘗試他們的可變模板實現。
一個比較簡單的例子?不可能。這是討厭的東西。 –
我建議如果這是一個使用不同編譯器的選項,如果您需要可變參數模板,microsoft在採用C++ 11功能方面速度非常慢。我最近編寫了一個小型到中型的C++ 11應用程序,它在gcc中編譯得很好,但是當試圖使用visual studio 2012時,我花了差不多3天的時間來找出不同的方法來編寫VS2012不知道的所有東西關於。使用實際可變參數模板的相對簡單的例子可以在這裏找到http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html - 一個類型安全的printf,不知道如何映射MS的願景。 – xception
Visual Studio 2012在variadics中添加了修補程序:http://www.microsoft.com/en-us/download/details.aspx?id=35515 –