변수 템플릿을 템플릿 템플릿 인수로 전달할 수 있습니까?


11

다음의 무의미한 예제는 컴파일되지 않지만 변수 템플릿을 템플릿 템플릿 인수로 전달하는 다른 방법이 있습니까?

template<typename T>
constexpr auto zero = T{0};

template<typename T, template<typename> auto VariableTemplate>
constexpr auto add_one()
{
    return VariableTemplate<T> + T{1};
}

int main()
{
    return add_one<int, zero>();
}

컴파일러 탐색기를 사용해보십시오

답변:


3

짧은 대답 : 아니요.

긴 대답 : 예 클래스 템플릿을 통해 간접적 인 것을 사용할 수 있습니다.

template<typename T>
constexpr auto zero = T{0};

template<typename T>
struct zero_global {
    static constexpr auto value = zero<T>;
};

template<typename T, template<typename> class VariableTemplate>
constexpr auto add_one()
{
    return VariableTemplate<T>::value + T{1};
}

int main()
{
    return add_one<int, zero_global>();
}

라이브 예


정적 멤버를 사용하여 구조체를 작성해야한다는 점이 약간 뒤로 보입니다. 이것이 미래의 표준과 함께 올 것으로 예상되는 것입니까? 왜 오늘날 이미 화석 성이 아닌지 아십니까?
idclev 463035818

1
@ formerlyknownas_463035818 아직 아무도 그것을 제안했다고 생각하지 않습니다 (종이에서 그것을 보지 못했을 수도 있습니다) 현재 유형이 아닌 템플릿 매개 변수는 pr- 값입니다. 그러나 무엇을 value<T>의미할까요? 전역 변수에 대한 참조? 또한 ODR은 유형이 아닌 템플릿 매개 변수를 사용할 수 없지만 템플릿 전역을 사용할 수는 있습니다.
기 illa Racicot

힌트를 주셔서 감사합니다, 나는 변수 템플릿 너무 익숙하지 않은 나는, 그래서 나는, C ++ (11)에 여전히 생각하고, 내가 기대 한 것 그게 뭔가가 상자 밖으로 작동
idclev 463,035,818
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.