gpt4 book ai didi

c++ - 指向实现模式的指针

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

我正在尝试使用模板类来实现指向实现模式的指针,并且为了创建独立的类及其实现,我使用了下一种方法:

template<typename T>
struct __A_impl;

template<typename T>
struct A
{
using __impl_t = __A_impl<T>;

A(__impl_t* t);

__impl_t* _t;
};

template<typename T>
struct B
{
T _t;
};

template<typename T>
using __A_impl = B<T>;

使用这种形式,如果我想更改“B”的名称,这不会以任何方式影响 A 的定义。但是,我收到 gcc 的下一个错误:

test.cpp:21:22: error: declaration of template 'template<class T> using __A_impl =    B<T>'
test.cpp:2:7: error: conflicts with previous declaration 'template<class T> class __A_impl'
test.cpp:21:22: error: redeclaration of 'template<class T> using __A_impl = B<T>'
test.cpp:2:7: note: previous declaration 'template<class T> class __A_impl'

我怎样才能做到这一点?因为使用 typedef 声明符是不可能的。

最佳答案

你不能前向声明一个 typedef。您只能转发声明类/结构/枚举。

此外,PIMPL 通常用于防止编译器看到实现,但在您的情况下,这永远不会发生,因为它是一个模板,所以我不明白这一点。

关于c++ - 指向实现模式的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14546845/

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