C# 模板结构由ref传递给void函数
一段时间以来,我一直在努力解决这个问题,但就是想不出来C# 模板结构由ref传递给void函数,c#,C#,一段时间以来,我一直在努力解决这个问题,但就是想不出来 #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
#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提前感谢您的帮助。主要问题是vec.x+=1部件。IncVec应该能够接受任何类型的T,并期望它能够向其添加1。但是如果T是一个布尔呢?不能在C中的布尔值或随机类中添加1
A.@ DaMiNeNeth-Tun-BuielFor指出C++中的模板与C.</P>中的泛型不相同。 但是,在C中,您可以向类型T添加约束,如下所示。请注意,方法名称后面缺少约束:
public static void IncVec<T>(ref Vec3<T> vec)
where T : xxxx // Constraints to the generic type
{
vec.x += 1;
}
例如,其中xxxx可以是类型或接口的名称,这意味着类型T必须继承或实现此类型。它也可以是class,表示类型T必须是class,然后例如int将不被允许,或者它可以是struct,以防止使用类
但是没有约束,你可以指定让你使用代码+= 1我可以想到。< /P>公共静态空洞CVEC3 VEC3 VCin一般,不要尝试把C和C++当作相同的东西。泛型不是模板。结构和类在两种语言中的含义不同,等等@JohnathanBarclay我试过了,但它不允许我对int+struct使用+运算符。。我不能用一些东西,在那里我可以做一些像参考向量。。。其中T:数字或smth@达米恩,不信的人,我会记住的。我刚开始玩c。。谢谢你提供的信息。他们曾经考虑过添加一个,但从未发生过。所以你不能用泛型类型做数学运算,因为操作符是静态的,所以不能构成接口的一部分,所以C目前没有可能的约束。