ric*_*cab 5 c++ alias templates using forward-declaration
我需要实现以下接口
struct mutex;
struct interface
{
//...
mutex& getMutex();
};
Run Code Online (Sandbox Code Playgroud)
我可以using mutex = ParticularMutex在我的实现中使用直觉,但gcc告诉我:
error: conflicting declaration ‘using mutex = ’
error: ‘class mutex’ has a previous declaration as ‘class mutex’
Run Code Online (Sandbox Code Playgroud)
我没有定义任何两次,只是宣布两次,就像前面宣布的那样,所以
interface?interface定义?用template <typename mutex>?它不起作用,因为前向声明struct mutex;告诉编译器这mutex是一个新类型.有了using那么你正在创建一个类型的别名,这意味着它不是一个新的类型(如许的编译器),但一个别名到现有的类型.
没有.
是.
你可以做的是:
struct mutex : ParticularMutex {
using ParticularMutex::ParticularMutex; // inherit constructors
};
Run Code Online (Sandbox Code Playgroud)
哪个定义了一个类型,ParticularMutex从中可以很好地兼容.当然,这是一种可能导致其他问题的新类型.