가변 템플릿에 대한 기본 인수를 가질 수 없다는 결정 뒤에 합리적인 근거가 있는지 아는 사람 있습니까? 상상하기가 어렵지 않습니다.기본 variadic 템플릿을 가질 수없는 이유
template<class T, class... Policies = Default_Policy>
class X
{
};
가변 템플릿에 대한 기본 인수를 가질 수 없다는 결정 뒤에 합리적인 근거가 있는지 아는 사람 있습니까? 상상하기가 어렵지 않습니다.기본 variadic 템플릿을 가질 수없는 이유
template<class T, class... Policies = Default_Policy>
class X
{
};
주어진 인수가 다를 경우 기본 인수를 사용하는 것이 혼란 스럽습니다. 예를 들어, 템플릿을 인스턴스화 할 때이 기본값을 사용하겠다고 컴파일러에 알리는 방법은 무엇입니까? 어떻게 컴파일러는 등의 이름이 "기본 default_policy"를 사용하여 명시 적으로하지 않고
X<T, Default_Policy>
또는
X<T, Default_Policy, Default_Policy>
를 원한다면 알아?
이것은 (최소한 내 의견으로는) variadic 템플릿에 대한 기본 인수가없는 좋은 이유입니다.
매개 변수 팩에 0 개의 값을 포함하는 것이 유효합니다. 컴파일러는 사용자가 X<T>
을 쓸 때 어떻게 선택해야합니까 : Policies = {}
또는 Policies = {Default_Policy}
?
(그리고 당신의 구문이 1 개 이상의 항목을 디폴트 값을 허용하지 않지만, 그건 그냥 구문입니다.)
당신은 기본 인수를 위해 새로운 언어 기능이 필요하지 않습니다. 전문화와 템플리트 별명으로 충분합니다.
template<template<typename...> class t, typename def, typename... a>
struct give_default {
using type = t<a...>;
};
template<template<typename...> class t, typename def>
struct give_default<t, def> {
using type = t<def>;
};
template<typename... t>
using X_with_default = typename give_default<X, Default_Policy, t...>::type;
#Pubby, 오, 알겠습니다. 당신이 증명 한 것처럼 더 단순하고/더 좋고/더 자연스러운 방법이 존재한다는 것을 깨닫지 못하고 약간의 미친 구문을 읽을 수있었습니다 (Policy = {P1, P2, P3}). 나는 정말로 어리 석다. – smallB
맹세로 인해 불편을 끼쳐 드려 죄송합니다. –