gpt4 book ai didi

c++ - 可以在没有 typedef 的情况下访问模板外部的模板参数吗?

转载 作者:可可西里 更新时间:2023-11-01 17:37:33 27 4
gpt4 key购买 nike

一个简单的例子:

template<typename _X> // this template parameter should be usable outside!
struct Small {
typedef _X X; // this is tedious!
X foo;
};

template<typename SomeSmall>
struct Big {
typedef typename SomeSmall::X X; // want to use X here!
SomeSmall bar;
X toe;
};

有没有办法在 Small 类中不使用 typedef 来访问 Small 的模板参数 X

最佳答案

是的,定义第二个具有部分特化的“getter”模板。

template< typename >
struct get_Small_X; // base template is incomplete, invalid

template< typename X > // only specializations exist
struct get_Small_X< Small< X > > {
typedef X type;
};

现在代替 Small<X>::X你有typename get_Small_X< Small<X> >::type .

顺便说一下,_X是一个保留的标识符,所以你不应该将它用于任何事情。 X_是更好的选择。


高级主题:模板自省(introspection)。

虽然我在考虑,但您不需要为每个模板单独定义它。一个主模板就可以做到。

这在 Comeau 中编译,我知道有关于匹配模板模板参数的规则,但我认为这没关系......在部分特化中 master 模板禁止模板模板参数。

template< typename >
struct get_first_type_argument;

template< template< typename > class T, typename X >
struct get_first_type_argument< T< X > > {
typedef X type;
};

template< typename X >
struct simple;

get_first_type_argument< simple< int > >::type q = 5;

这只适用于“一元”模板,但在一般情况下可以在 C++0x 中进行调整。

关于c++ - 可以在没有 typedef 的情况下访问模板外部的模板参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3696286/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com