gpt4 book ai didi

c++ - 如何避免为类指定模板参数?

转载 作者:搜寻专家 更新时间:2023-10-31 00:13:50 25 4
gpt4 key购买 nike

SFML 对 Vector2 的实现允许以下语法:

sf::Vector2f v1(16.5f, 24.f);
sf::Vector2f v2 = v1 * 5.f;
sf::Vector2f v3;

...意味着您不必在创建对象时指定模板参数。我正试图出于我自己的目的重现此代码,但看不到它是如何工作的。这是它的样子:

template <typename T>
class Vector2
{
public :

Vector2();

Vector2(T X, T Y);

template <typename U>
explicit Vector2(const Vector2<U>& vector);

// Member data
T x;
T y;
};

我的尝试是这样的:

#include <type_traits>

template <typename T, typename = typename std::enable_if<
std::is_same<T, int>::value
|| std::is_same<T, float>::value, T>::type>
struct Point
{
T x, y;

Point(T x, T y) : x(x), y(y)
{
}

template <typename U>
explicit Point(const Point<U>& point)
: x(point.x), y(point.y)
{
}
};

但我仍然收到错误“缺少模板参数”。什么是 SFML 正在做而我没有做的?

最佳答案

在您链接的源文件中,注意靠近底部的这一行:

typedef Vector2<float> Vector2f;

这是为 Vector2<float> 创建一个别名输入 Vector2f -- 它们是同一类型,只是可以使用不同的名称。

你可以做同样的事情:

typedef Point<float> Pointf;
typedef Point<int> Pointi;

关于c++ - 如何避免为类指定模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25499038/

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