gpt4 book ai didi

c++ - 如何重构我的库以包含模板?

转载 作者:太空宇宙 更新时间:2023-11-04 15:26:41 25 4
gpt4 key购买 nike

在我的整个项目中已经在没有模板的情况下使用它之后,我正在尝试将模板功能添加到我的 vector 类。

旧版本使用硬编码float 来保存xyz 的值。我现在要做的是让类也能够通过模板使用 double。

我的类定义如下:

namespace alg {

template <class T=float> // <- note the default type specification
struct vector
{
T x, y, z;
vector() : x(0), y(0), z(0) {}
explicit vector(T f) : x(f), y(f), z(f) {}
vector(T x, T y, T z) : x(x), y(y), z(z) {}

// etc
};

}

我希望现在能够在不更改其中代码的情况下编译我的项目,方法是告诉模板在没有给出模板参数的情况下默认使用 float

但是,我仍然收到有关缺少模板参数的错误...

#include "vector.hpp"

int main() {
alg::vector a;
return 0;
}

--

$ g++ -O3 -Wall -Wextra -std=gnu++0x test.cpp
test.cpp: In function ‘int main()’:
test.cpp:4:17: error: missing template arguments before ‘a’
test.cpp:4:17: error: expected ‘;’ before ‘a’

如何在不更改 test.cpp 的情况下使这段代码工作?最好不要破坏 struct 名称并使用 typedef

最佳答案

不幸的是,引用没有尖括号的类模板是非法的。

STL 使用 std::string 执行此操作的方式是这样的,即使你的请求是“没有修改”:

template <typename T> class basic_string { ... };
...
typedef basic_string<char> string;

在你的情况下,你必须写 vector<>到处,或重命名你的模板:

template <class T>
struct basic_vector {
...
};

typedef basic_vector<float> vector;

关于c++ - 如何重构我的库以包含模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7162158/

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