«variadic-templates» etiketlenmiş sorular

Variadic şablonlar, değişken sayıda parametre alan şablonlardır.

8
Eşleşen işlev işaretçisini çağırmak için bir parçayı “açmak”
Daha std::tuplesonra depolanan türleri eşleşen bir işlev işaretçisi için bir çağrı için bağımsız değişken olarak kullanılacak değerleri, değişen sayıda depolamaya çalışıyorum . Çözmek için mücadele ettiğim sorunu gösteren basitleştirilmiş bir örnek oluşturdum: #include <iostream> #include <tuple> void f(int a, double b, void* c) { std::cout << a << ":" << …

6
make_unique ve mükemmel yönlendirme
std::make_uniqueStandart C ++ 11 kitaplığında neden işlev şablonu yok ? buldum std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); biraz ayrıntılı. Aşağıdakiler çok daha hoş olmaz mıydı? auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3); Bu newgüzel gizler ve sadece bir kez türü bahseder. Her neyse, işte benim uygulama girişimim make_unique: template<typename T, typename... Args> …

1
Variadic bir fonksiyondaki tüm argümanlarda std :: forward nasıl çağrılır?
Ben sadece genel bir nesne fabrikası yazıyordum ve değişken bir şablon oluşturmak için boost önişlemci meta kitaplığını kullanıyordum (2010 kullanıyorum ve bu onları desteklemiyor). Fonksiyonum rval referansları kullanıyor ve std::forwardmükemmel yönlendirme yapmak için beni düşündürdü ... C ++ 0X çıktığında ve standart bir derleyicim olduğunda bunu gerçek değişken şablonlarla yapardım. …

2
“……” Belirtecinin anlamı nedir? yani parametre paketinde çift üç nokta operatörü
Gcc'nin yeni C ++ 11 başlıklarının mevcut uygulamasına göz atarken, "......" belirtecine rastladım. Aşağıdaki kodun iyi derlendiğini [ideone.com aracılığıyla] kontrol edebilirsiniz. template <typename T> struct X { /* ... */ }; template <typename T, typename ... U> struct X<T(U......)> // this line is the important one { /* ... */ …

2
Variadic şablonlar bağlamında “…” simgesi için kurallar nelerdir?
C ++ 11'de bunun gibi çeşitli şablonlar vardır: template< class T, class... Args > unique_ptr<T> make_unique( Args&&... args ) { return unique_ptr<T>(new T(std::forward<Args>(args)...)); } Bazı Meraklısına bu konuda vardır: ifadesi std::forward<Args>(args)...hem kullanır Argsve argsancak sadece bir ...belirteç. Ayrıca std::forward, yalnızca bir şablon parametresi ve bir bağımsız değişken alan, değişken olmayan …

4
Değişken şablon argümanları nasıl saklanır?
Bir parametre paketini daha sonra kullanmak için bir şekilde saklamak mümkün müdür? template <typename... T> class Action { private: std::function<void(T...)> f; T... args; // <--- something like this public: Action(std::function<void(T...)> f, T... args) : f(f), args(args) {} void act(){ f(args); // <--- such that this will be possible } } …

11
Pretty-print std :: tuple
Bu, oldukça şık ve tamamen genel bir çözüm geliştirmeyi başardığımız, oldukça baskı yapan STL kaplar hakkındaki önceki sorumun devamı niteliğindedir. Bu sonraki adımda, çeşitli std::tuple<Args...>şablonlar kullanarak (yani bu kesinlikle C ++ 11) güzel baskılar eklemek istiyorum . İçin std::pair<S,T>ben sadece söylemek, std::ostream & operator<<(std::ostream & o, const std::pair<S,T> & p) …


3
C ++ 'da tip listelerinin Kartezyen ürününü nasıl oluşturabilirim?
Kendini açıklayıcı. Temelde, şöyle listeleri var diyelim: using type_list_1 = type_list<int, somestructA>; using type_list_2 = type_list<somestructB>; using type_list_3 = type_list<double, short>; Değişken sayıda tip listesi olabilir. Kartezyen bir ürün listesi nasıl alabilirim? result = type_list< type_list<int, somestructB, double>, type_list<int, somestructB, short>, type_list<somestructA, somestructB, double>, type_list<somestructA, somestructB, short> >; Burada verildiği …


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.