[英]Friending a dependent template class
我的代碼中有一個案例,需要讓一個依賴的模板類成為朋友,但我認為我已經窮盡了所有可能性,但沒有一種可行。 這有可能嗎? 如果是這樣,怎么辦?
最簡單的例子:
struct Traits {
template <typename T>
struct Foo {
typedef typename T::bar* type;
};
};
template <typename T>
class Bar
{
typedef int bar;
// need to make T::Foo<Bar> a friend somehow?
typedef typename T::template Foo<Bar>::type type; // won't compile because bar is private...
// suppose I cannot make bar public.
type val;
};
int main() {
Bar<Traits> b;
}
struct Traits {
template <typename T>
struct Foo {
typedef typename T::bar* type;
};
};
template <typename T>
class Bar
{
typedef int bar;
friend typename T::template Foo<Bar>;
typedef typename T::template Foo<Bar>::type type;
type val;
};
int main() {
Bar<Traits> b;
}
在您發表評論時,我可以用插入的代碼進行編譯:
friend struct Traits::Foo<Bar>;
老實說,這樣您會不會變得更好?
template <typename T>
class Bar;
struct Traits
{
public:
template <typename T>
struct Foo
{
typedef Bar<T> bar_type;
typedef typename bar_type::bar* type;
};
};
template <typename T>
class Bar
{
typedef int bar;
typedef Bar self_type;
typedef struct Traits::template Foo<T> traits_type;
friend traits_type;
typedef typename traits_type::type type;
type val;
};
int main(int argc,char** argv)
{
Bar<Traits> b;
}
這比允許所有包含public typedef類型的東西成為您的朋友要安全得多,盡管這很奇怪。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.