gpt4 book ai didi

c++ - 模板化 pimpl 转发

转载 作者:行者123 更新时间:2023-11-28 08:07:19 27 4
gpt4 key购买 nike

我在一种模板化的层次结构中有一堆相关的指标,看起来像

template <int level>
struct index{
index<level - 1> w;
int x, y;
};

template <> struct index<0> { int x, y; };

template <int level>
struct data;

和一个应该生成和缓存由它们索引的对象的类。我想为这个类使用 pimpl,我想知道是否有办法使用模板将函数调用转发给实现类。有点像

class Cache{
template <int level>
shared_ptr<data<level>> get_data(const index<level> & index);
};

最佳答案

简而言之,不(如果我正确理解你的问题)。

问题在于,在转发器的实现点,您需要实现类的完整定义(而不仅仅是声明)。如果你想为此目的使用模板成员函数,你需要在每个使用它们的编译单元中定义它们,即通常在你声明它们的同一个头文件中。这意味着需要在声明接口(interface)类的同一 header 中定义实现类(这首先会破坏类的目的)。

(如果你的编译器支持 export 关键字,你可以单独定义模板方法,所以在这种情况下它会起作用。实际上,Comeau 是我所知道的唯一支持 的编译器export,它已从 C++11 中完全删除)。

比较 How can I avoid linker errors with my template functions?在 C++-FAQ-lite 中。

关于c++ - 模板化 pimpl 转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10046646/

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