gpt4 book ai didi

c++ - 如何将模板函数声明为模板嵌套类的 friend ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:42:10 36 4
gpt4 key购买 nike

我怎样才能制作get封闭范围内的一个函数,可以访问 outer<T>::inner<U> 的私有(private)构造函数?

template <typename T>
struct outer {
template <typename U>
class inner {
inner() {}
public:
friend inner get(outer&) {
return {};
}
};
};


int main() {
outer<int> foo;
outer<int>::inner<float> bar = get<float>(foo);
}

我尝试通过制作 inner 来宣布它不在类里面有一个template <typename V, typename W> friend inner<V> get(outer<W>&);但这也不起作用。

最佳答案

I have tried declaring it out of class by making inner have a template <typename V, typename W> friend inner<V> get(outer<W>&);

你需要在友元声明之前声明模板函数,告诉编译器 get是一个模板。例如

// definition of outer
template <typename T>
struct outer {

// forward declaration of inner
template <typename U>
class inner;
};

// declaration of get
template <typename V, typename W>
typename outer<W>::template inner<V> get(outer<W>&);

// definition of inner
template <typename T>
template <typename U>
class outer<T>::inner {
inner() {}
public:
// friend declaration for get<U, T>
friend inner<U> get<U>(outer<T>&);
};

// definition of get
template <typename V, typename W>
typename outer<W>::template inner<V> get(outer<W>&) {
return {};
}

LIVE

关于c++ - 如何将模板函数声明为模板嵌套类的 friend ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47118631/

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