&Quot anlamı nedir;... ..." token? yani parametre paketi üzerinde çift üç nokta operatörü
C 11 yeni başlıkları gcc mevcut uygulama gezinirken, rastladım "......" token. Aşağıdaki kodu kontrol edebilirsiniz compiles fine [ideone.com üzerinden].
template <typename T>
struct X
{ /* ... */ };
template <typename T, typename ... U>
struct X<T(U......)> // this line is the important one
{ /* ... */ };
Bu işaretin anlamı nedir?
edit: ÇOK kesilmiş gibi Görünüyor"......" soru başlığında "...", yani ben, gerçekten"......" için . :)
CEVAP
Bu gariplik her örneği tek kişilik düzenli bir üç nokta bir dava ile eşleştirilmiş.
template<typename _Res, typename... _ArgTypes>
struct _Weak_result_type_impl<_Res(_ArgTypes...)>
{ typedef _Res result_type; };
template<typename _Res, typename... _ArgTypes>
struct _Weak_result_type_impl<_Res(_ArgTypes......)>
{ typedef _Res result_type; };
template<typename _Res, typename... _ArgTypes>
struct _Weak_result_type_impl<_Res(_ArgTypes...) const>
{ typedef _Res result_type; };
template<typename _Res, typename... _ArgTypes>
struct _Weak_result_type_impl<_Res(_ArgTypes......) const>
{ typedef _Res result_type; };
Benim tahminim çift üç nokta _ArgTypes..., ...
, yani variadic bir şablon genişletme C-stil varargs bir liste takip anlamında benzer.
Here's a test bu teoriyi destekleyen yeni bir kazanan sözde operatör için daha kötü bence.
Düzenleme:Bu uyumlu gibi görünüyor. Madde 8.3.5/3 parametre listesi olarak form için bir yol açıklar
parametre bildirim listesi
opt... opt
Çift üç nokta parametre paketi, başka bir üç nokta tarafından izlenen bildirimi parametre-listesi bir son ile oluşur.
Tamamen isteğe bağlıdır virgül; §/4 8.3.5 diyor
Sözdizimsel olarak doğru ve nereden nereye “...” soyut-Bildiricisi bir parçası değil, “, ...” ile eş anlamlıdır “...”.
Busoyut-Bildiricisi, bir içinde[Düzenle]ama Johannes içinde soyut-Bildiricisi bir parametre bildirimi başvuruyorsunuz bu iyi bir nokta yapar. "Parametre bildirimi bir parçası" ve bu cümle neden sadece bilgilendirici bir not değil.. demediler neden acaba
Ayrıca, va_begin()
<cstdarg>
varargs listesi önce bir parametre gerektirir, prototip f(...)
özellikle C tarafından izin verilen bir işe yaramaz. Çapraz başvuru C99, düz yasadışı C. Yani, bu çok garip.
Kullanım not
İstek, here is a demonstration üç nokta iki:
#include <cstdio>
#include <string>
template< typename T >
T const &printf_helper( T const &x )
{ return x; }
char const *printf_helper( std::string const &x )
{ return x.c_str(); }
template< typename ... Req, typename ... Given >
int wrap_printf( int (*fn)( Req... ... ), Given ... args ) {
return fn( printf_helper( args ) ... );
}
int main() {
wrap_printf( &std::printf, "Hello %s\n", std::string( "world!" ) );
wrap_printf( &std::fprintf, stderr, std::string( "Error %d" ), 5 );
}
Gülen yüz " nedir;:)&; CSS yani"?...
&; UYARMAK içerik-uzunluk belirlenemed...
&Quot nedir;>" (büyüktür işare...
En "pythonic" parçalar bir l...
Çift nokta arasındaki farklılıklar&;.....