你不会了解 发表于 2021-11-29 13:52

C++中类成员模板函数怎么写?

假设头文件Hello.h
class Hello
{
    public:
      template<class, T>
      T example();
}


假设源文件Hello.c
#include "Hello.h"
template<class, T>
T    Hello::example()
{
    return new T();
}


上述代码是我在发帖时手写的伪代码,是有错误的

我的目的是让template<class, T>这一句放在函数的头部,而不是class的头部

因为我就一个成员函数用到了模板,但是这样编辑器不让我编译通过

请问有什么办法,可以将一个类的成员函数用模板,而不关类的什么事,看下面的实际调用例子


// 我不想这个调用
Hello<T> hello;
T t = hello.example()

// 我想这样调用
Hello hello;
hello.example<T>();

jamesAbc 发表于 2021-11-29 14:17

做不到的,实例化对象的时候没有类型模板也不知道怎么推导

pzx521521 发表于 2021-11-29 14:39

不应该 用模板函数
应该用接口

klamauk 发表于 2021-11-29 15:36

class H
{
public:
    int a;
};

class Hello
{
public:
    template<typename T>
    T* example() { return new T(); }
};

Hello hello1;
H* h1=hello1.example<H>();

这样吗?

你不会了解 发表于 2021-11-29 15:40

klamauk 发表于 2021-11-29 15:36
class H
{
public:


对,最终我是想实现这样的效果。
假定我有一个Hello类,里面有一万个方法
其中9999个方法都返回int型,只有一个example返回类型由用户<T>来定
但是如果我好像没法单独给example指定模板,必须得给Hello类指定模板

little_boy 发表于 2021-11-30 08:09

1.类的声明:test.h

#pragma once
class Hello
{
public:
        template<typename T>
        T example();
};

2.类的实现:test.cpp

#include "test.h"
#include <iostream>
usingstd::cout;
usingstd::endl;
template<typename T>
T Hello::example()
{
        cout << "Hello,World!" << endl;
        return 0;
}

3.测试:源.cpp

#include "test.h"
#include "test.cpp"
int main()
{
        Hello h;
        h.example<int>();
}

4.运行结果
页: [1]
查看完整版本: C++中类成员模板函数怎么写?