Когда я сталкиваюсь с шаблоном с несколькими аргументами по умолчанию, например.C++ Templates: переопределить некоторые, но не все аргументы по умолчанию?
template<typename ID = int, typename PAYLOAD = std::string>
class Foo{};
Есть ли способ обойти только несколько аргументов по умолчанию, а не все из них?
I.e. вместо того, чтобы писать следующее, чтобы создать класс, который использует целое вместо std::string
для параметра PAYLOAD
,
typedef Foo<int,int> Bar;
Могу ли я написать что-то подобное:
typedef Foo<PAYLOAD=int> Bar;
Я имею дело с предварительно другой команды -определенные шаблоны с большим количеством аргументов по умолчанию, и возможность использования второго метода кажется, что это улучшит ясность моего кода.
Рассматривая документацию и другие вопросы по StackOverflow, это не представляется возможным, но мне было интересно, может ли кто-нибудь объяснить, почему это не функция?
Afaik это возможно только в Python (возможно, также на других языках скриптов). В C++ нет способа сделать это, о чем я бы знал. – Chris
Обходные способы, например. [увеличение.параметр] (http://www.boost.org/doc/libs/1_58_0/libs/parameter/doc/html/index.html#class-template-parameter-support), см. также http://stackoverflow.com/ q/4209326/ – dyp
Вы также можете использовать некоторый шаблон построителя для достижения синтаксиса, близкого к: 'Foo_builder :: Payload :: type', или указав оба аргумента' Foo_builder :: ID :: Полезная нагрузка :: Тип' (в Любой заказ). –
dyp