微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用函数模板实例作为属性访问器

如何解决使用函数模板实例作为属性访问器

我正在使用 Microsoft 的 __declspec(property()) 语言扩展为一组数据提供各种访问器。我试图通过使用函数模板来减少我实际上必须编写的访问器函数数量,但我无法让它工作。 MSDN 网站上关于你能做什么和不能做什么的信息并不多,所以有点棘手。

理想情况下,我想要这样的东西:

struct vec2
{
    float x,y;
    vec2(float x,float y) : x(x),y(y) {}
};

struct vec4
{
    union 
    {
        struct { float x,y,z,w; };
        float data[4];
    };
    
    template <int a,int b> inline vec2 get()
    {
        return vec2(data[a],data[b]);
    }
    
    template <int a,int b> inline void set(const vec2& v)
    {
        data[a] = v.x;
        data[b] = v.y;
    }
    
    // Specifying explicit template parameters does not work and gives
    // a Syntax error on character '<'
    __declspec(property(get = get<0,0>)) vec2 xx;
    __declspec(property(get = get<0,1>,put = set<0,1>)) vec2 xy;
    __declspec(property(get = get<0,2>,2>)) vec2 xz;
    __declspec(property(get = get<0,3>,3>)) vec2 xw;
    // etc
};

int main(int argc,char *argv[])
{
    vec4 v;
    
    v.xy = vec2(1.f,2.f);
    
    return 0;
}

我还考虑过可能使用 std::bind 将整数常量作为函数参数而不是模板参数传递,但同样,您在 get 中允许写入的内容似乎非常有限{1}} 和 put 字段。如果一切都失败了,我将使用脚本生成所有代码,但我想知道是否有办法解决这个问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。