gpt4 book ai didi

c++ - 除了使 TMP 编译之外,::template 意味着什么

转载 作者:太空狗 更新时间:2023-10-29 21:28:55 26 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
Using template parameters as template parameters

这是一些高度模板化的容器类的代码片段,用于绑定(bind)任意数量的任意类型的字段。我的一个同事发现我的代码没有在 GCC 下编译,经过大量研究,他找到了修复方法,通过添加 ::template 来让它正确推导模板......我们俩都不是以前见过这个,但仍然不知道这是什么,除了 GCC 需要我的代码而 Visual Studio 2010 不需要的东西。

    template< typename T, int N >
struct SingleBindMemberStruct
{
typedef typename TGenericBindingHandler<T>::BindToUse BindType;
BindType m_Member;

template< typename ContainerClass >
static void AddBinding(CPackedTableDataSpec* spec)
{
// Perhaps with newer versions of the compilers we can find a syntax that both accept. This is with gcc-4.5 and Visual Studio 2010
#if defined(__GNUC__)
TGenericBindingHandler<T>::template AddBinding<ContainerClass>(spec, N, &ContainerClass::template SingleBindMemberStruct<T,N>::m_Member);
#else
TGenericBindingHandler<T>::template AddBinding<ContainerClass>(spec, N, &ContainerClass::SingleBindMemberStruct<T,N>::m_Member);
#endif
}
};

有谁知道 ::template 可以或应该用于什么语法?如果有人有描述它的标准片段,那将是完美的!

编辑:

好吧,听起来就像帮助编译器确定什么是模板一样简单,因为这是一个 static 函数,我们使用范围解析运算符而不是点运算符来告诉编译器的模板。所以现在唯一剩下的问题是为什么 Visual Studio 不需要它?

26 4 0