2012-10-08 114 views
2

我想創建一個構造函數,它需要可變數量的參數,我非常想保持類型安全。 我搜索了一遍,並不斷找到「虛擬變量」這個詞(例如:http://msdn.microsoft.com/en-us/library/hh567368.aspx) 但是我找不到任何如何使用這些虛擬變量的例子,我想避免直接看std :: tuple的源文件。在Visual Studio 2012中的虛擬變量

那麼有沒有人知道這些虛擬變量的一個相對簡單的例子?使用BOOST_PP_REPEAT

一個簡單的示例:

+0

一個比較簡單的例子?不可能。 這是討厭的東西。 –

+0

我建議如果這是一個使用不同編譯器的選項,如果您需要可變參數模板,microsoft在採用C++ 11功能方面速度非常慢。我最近編寫了一個小型到中型的C++ 11應用程序,它在gcc中編譯得很好,但是當試圖使用visual studio 2012時,我花了差不多3天的時間來找出不同的方法來編寫VS2012不知道的所有東西關於。使用實際可變參數模板的相對簡單的例子可以在這裏找到http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html - 一個類型安全的printf,不知道如何映射MS的願景。 – xception

+0

Visual Studio 2012在variadics中添加了修補程序:http://www.microsoft.com/en-us/download/details.aspx?id=35515 –

回答

4

您還可以使用升壓預處理庫做到這一點

#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 
+0

鏈接到官方文檔:http://www.boost.org/libs/預處理器/ – ildjarn

0

現在你也可以使用十一月CTP和嘗試他們的可變模板實現。