gpt4 book ai didi

C++ 模板解决方法

转载 作者:搜寻专家 更新时间:2023-10-31 01:58:32 26 4
gpt4 key购买 nike

在我的 C++ 项目中,我最近偶然发现了一个小问题:模板。

我在我的头文件(由每个 .cpp 共享)中声明了一个类 Data,并给它一个模板函数。我在 data.cpp 中实现了它。我很快记起模板是如何在现场编译的,当它们被引用时,这打破了使用 .h 和 .cpp 文件完成的声明/实现分离。

所以我想到了一些变通方法,将:

class Data {
template<typename T> void myFunc(T in);
};

#define __DATA_TEMPLATE_IMPL
#include "Data.cpp"
#undef __DATA_TEMPLATE_IMPL

在 header.h 和:

#ifndef __DATA_TEMPLATE_IMPL

// non-template functions and other stuff....

#else

template<typename T>
void Data::myFunc(T in) {
// implementation of template function
}

#endif

这是一个很大的解决方法,对于编译器来说,它看起来好像是 #else#endif 之间的代码被移到了头文件中。

两个问题:

你觉得这有什么问题吗?您能想到这可能是错误的、低效的或其他原因吗?

有没有更好的方法(除了实际将实现放在头文件中)?

最佳答案

Do you see anything wrong with this? Can you think of any reason this might be wrong, inneficient, or whatever?

是的。

  • 您的构建工具将是:

    • 太愚蠢/手动以至于他们没有意识到当实现文件更改时需要重新编译客户端代码,或者
    • 足够聪明,所以...
      • 对客户端代码通常会从中解耦的实现文件部分的更改 - 行外函数、私有(private)实现等 - 现在会触发 客户端 代码的重新编译。这种解耦是将头文件与实现文件放在首位的主要原因。对于企业规模构建中的较低级别代码,对其进行妥协是 Not Acceptable 。
  • 这只是其他开发人员在理解您的代码之前必须发现的另一件事。

Is there any better way (besides actually putting the implementation in the header file)?

在什么方面更好?你有没有试图解决的实际问题?如果是这样,可能有很多方法可以解决它。如果您的问题只是对不优雅感到沮丧,那么继续前进……生命太短暂。

关于C++ 模板解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3921012/

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