【发布时间】:2020-05-22 17:02:12
【问题描述】:
一段时间以来,我一直在努力解决这个问题,但就是想不通。
#include <iostream>
template<class T>
struct Vec3
{
T x, y, z;
Vec3(T _x, T _y, T _z) : x(_x), y(_y), z(_z) {}
};
template <class T>
void IncVec(Vec3<T>& vec)
{
vec.x += 1;
}
int main(void)
{
Vec3<float> vec = Vec3<float>(1, 2, 3);
IncVec(vec);
std::cout << vec.x;
}
我基本上想在 C# 中重新创建它。到目前为止,我得到了这个:
using System;
namespace cs_playground
{
public struct Vec3<T>
{
public T x, y, z;
public Vec3(T _x, T _y, T _z)
{
x = _x;
y = _y;
z = _z;
}
}
class Program
{
public static void IncVec(ref Vec3<T> vec)
{
vec.x += 1;
}
static void Main()
{
Vec3<float> vec = new Vec3<float>(1, 2, 3);
IncVec(ref vec);
Console.WriteLine(vec.x);
}
}
}
它真的不喜欢 "ref Vec3" .. 我的意思是.. 它显然适用于 "ref Vec3" 等等.. 但我很难像.. 传递我猜的类型..
提前感谢您的任何帮助。
【问题讨论】:
-
public static void IncVec<T>(ref Vec3<T> vec) -
一般来说,不要试图将 C# 和 C++ 视为同一个东西。泛型不是模板。结构和类在两种语言中的含义不同,等等。
-
@JohnathanBarclay 我试过了,但它不允许我使用 + 运算符来表示 int + struct .. 我不能使用一些东西,我可以做一些类似 (ref vec...) where T : numeric或某事? ..
-
@Damien_The_Unbeliever 我会记住这一点。我刚开始玩 c# .. 谢谢你的信息。
-
他们曾考虑过在某一时刻添加
IArithmetic,但从未发生过。所以你不能用泛型类型做数学。
标签: c#