在嵌套函数模板中使用模板类型名

Using template typename in a nested function template

好的,我正在为模板苦苦挣扎。在 问题中我了解到,根本不可能将类型说明符传递给函数,所以我的下一个方法是在 <>.

中传递类型

想象一个函数模板 foo<U>(),它是模板 class A 的成员函数。因此,如果我创建一个对象 A<T> a,我可以用任何类型调用 a.foo<U>()

我要如何编写等效的函数模板才能像 wrappedFoo<U>(a) 一样传递 aU

重要 需要与 C++98 兼容

您可以执行以下操作:

template <typename U, typename T>
XXXX /* See below */
WrappedFoo(/*const*/ A<T>& a)
{
    return a.template foo<U>();
}

最难的部分是 return 没有 C++11 的 decltype 类型。

因此,如果 return 类型确实取决于参数类型,您可以创建一个特征,例如:

template <typename U, typename T>
struct Ret
{
    typedef U type;
};

template <typename T> struct Ret<T, A<T> >
struct Ret
{
    typedef bool type;
};

然后将XXXX替换为typename Ret<U, T>::type