gpt4 book ai didi

c++ - 非特化模板中模板特化的成员访问

转载 作者:行者123 更新时间:2023-11-30 03:53:02 28 4
gpt4 key购买 nike

以下代码无法编译(使用 clang):

template<int N>
class Foo {
public:
Foo() : value(N) { }

void getValue(Foo<1>& foo)
{
value = foo.value;
}

protected:
int value;
};

int main(int argc, const char * argv[])
{
Foo<1> fooOne = Foo<1>();

Foo<2> fooTwo = Foo<2>();

fooTwo.getValue(fooOne);

return 0;
}

错误是main.cpp:21:15: error: 'value' is a protected member of 'Foo<1>' .这一切都很好。

我的问题是有没有办法使用 friend 让它工作?例如,以下代码会产生相同的错误,但我希望它会起作用。

template<int N>
class Foo {
public:
Foo() : value(N) { }

friend class Foo<1>;

void getValue(Foo<1>& foo)
{
value = foo.value;
}

protected:
int value;
};

我当然可以非常可怕并使用 Accessing protected member of template parameter 中的技巧或 http://www.gotw.ca/gotw/076.htm .但我宁愿不诉诸那种级别的 hackery 来做一些我可能只是很感兴趣的事情。

最佳答案

你是 friend - 错误的方式。这是Foo<N>需要成为 Foo<1> 的 friend ,因为它需要访问 Foo<1>的内部结构;你正在制作Foo<1>一个friendFoo<N> .为简单起见,您可以只使用 friend所有这些:

template <int N>
class Foo {
// mass inter-Foo friendship
template <int > friend class Foo;

// rest as you had before
};

关于c++ - 非特化模板中模板特化的成员访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30338902/

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