首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++模板[]重载

c++模板[]重载
EN

Stack Overflow用户
提问于 2012-07-19 20:41:20
回答 1查看 456关注 0票数 3

我有一个类,它有一个用于括号运算符的模板函数。它编译,但我不知道如何访问它。

参见下面的示例:

代码语言:javascript
复制
   class Test {
    public:
        template <class T> pServiceState operator[] (const std::string project) {
             return getService<T>(project);
        }

       template <class T> pServiceState getService(const std::string project) {
             pService s = get_service<T>();
             if(s == NULL) throw "Service does not exist on server";
             return s->state(project);
        }

    }

int main(){

    states.getService<content_uploader>("asd"); // Works
    states<content_uploader>["asd"]; // Throws syntax errors.

/*
error: expected primary-expression before ‘>’ token
error: expected primary-expression before ‘[’ token
*/


}

谢谢你的帮助,亚当

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-19 20:53:19

在这种情况下,编译器无法从参数派生模板参数T,因此需要指定它。语法类似于常规函数的语法。所以,试试:states.operator[]<content_uploader>("asd")

示例:

代码语言:javascript
复制
#include <iostream>
#include <vector>

class Foo
{
public:
    Foo() : vec(5, 1) {}
    template <typename T>
    int operator[](size_t index)
    {
        std::cout << "calling [] with " << index << std::endl;
        return vec[index];
    }
private:
    std::vector<int> vec;
};

int main()
{
    Foo foo;
    foo.operator[]<int>(2);
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11568950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档