Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模板结构由ref传递给void函数_C# - Fatal编程技术网

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。。我是说。。它显然可以与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目前没有可能的约束。