gpt4 book ai didi

c++ - 尝试与 typedef 交 friend 时出现 "elaborated type refers to typedef"错误

转载 作者:可可西里 更新时间:2023-11-01 18:16:13 26 4
gpt4 key购买 nike

假设我有以下代码(一个简单的 CRTP 类层次结构)。我想对基类类型进行 typedef 以节省自己的输入(在我的实际代码中,我多次使用基类类型并且基类采用多个模板参数),并且我需要与基类交 friend ,因为我想保留实现私有(private)。

template< class D >
class Base
{

public:

void foo() { *static_cast< D * >(this)->foo_i(); }

};

template< class T >
class Derived : public Base< Derived< T > >
{

public:

typedef class Base< Derived< T > > BaseType;

private:

// This here is the offending line
friend class BaseType;

void foo_i() { std::cout << "foo\n"; }

};

Derived< int > crash_dummy;

clang 说:

[...]/main.cpp:38:22: error: elaborated type refers to a typedef
friend class BaseType;
^
[...]/main.cpp:33:44: note: declared here
typedef class Base< Derived< T > > BaseType;

我该如何解决这个问题?我注意到我可以简单地为 friend 类声明键入整个内容并且它工作正常,但即使是一点点重复的代码也会让我感到有点不舒服,所以我正在寻找一个更优雅的“适当”解决方案.

最佳答案

我相信这在 C++03 中是不可能的,但是 added to C++11其中您可以简单地省略 class 关键字:

friend BaseType;

关于c++ - 尝试与 typedef 交 friend 时出现 "elaborated type refers to typedef"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14623338/

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