, bir iyi biçimli programda tip void
bir örneğini olamaz, bu nedenle aşağıdaki beyanı gibi bir şey derlemek olmaz:Void tip :: Açıkçası tanımlama grubu
std::tuple<void, double, int> tup;
Ancak, Nesnelere karşı olan türlerle kesinlikle uğraştığımız sürece, sorun yok gibi görünüyor. Örneğin, benim derleyici (GCC) sağlar dememi:
typedef std::tuple<void, double, int> tuple_type;
o C++ 0x ile biz sadece meta-programlama bir sürü numara gerçekleştirmek için std::tuple
kullanabilirsiniz görünüyor, çünkü bu, bana ilginç olduğunu Daha önce boost::mpl
kitaplık gerekli olurdu. Örneğin, bir vektör türünü oluşturmak için std::tuple
'u kullanabiliriz. Biz demek sadece olabilir
:
Örneğin, bir fonksiyon imza temsil türlerinin bir vektör oluşturmak istediğinizi varsayalım
template <class R, class... Args>
struct get_function_signature;
template <class R, class... Args>
struct get_function_signature<R(*)(Args...)>
{
typedef std::tuple<R, Args...> type;
};
Bu fonksiyon imzası void
olsa bile, iş gibi görünüyor Hiçbir zaman aslında get_function_signature<F>::type
örneğini gerçeklestirmediğimiz sürece yazın.
Ancak, C++ 0x benim için hala yeni ve elbette tüm uygulamalar hala biraz deneysel, bu yüzden bu konuda biraz huzursuzum. std::tuple
'u gerçekten meta programlama için bir vektör olarak kullanabilir miyiz?
"boost :: mpl :: vector" ifadesinin kullanımdan kaldırılmasını bekliyorum. Her neyse, 'trpl :: mpl' işlevselliği ve şablon meta programlamasının çoğu, değişken şablonlar için destek artacağında önemli ölçüde değişecektir. –