c++ - 使用 typedef 将多个模板类合并为一个类

标签 c++ templates macros typedef

我有以下一段代码。 让我们有函数声明和实现 分开。

#include <iostream> 

class Y1 {}; 
class Y2 {}; 

template <class T1, class T2> 
class A
{   
    public:
        explicit A();
        void foo() const;
        int bar() const;
};  

template <class T1, class T2> 
A<T1, T2>::A() {}

template <class T1, class T2> 
void A<T1, T2>::foo() const {}

template <class T1, class T2> 
int A<T1, T2>::bar() const {}

int main() {
    A<Y1, Y2> a;
    a.foo();


    A<Y1, Y2> *a2 = new A<Y1, Y2>();
    a2->foo();

    return 0;
}   

每次写字都很痛苦

template <class T1, class T2>

对于每个对象声明和函数声明。

有人可以用宏或 typedef 来帮助缩短 模板参数说明。

最佳答案

首先,最好在类定义本身实现功能。然后,您的问题就会完全消失。

如果您必须在外部实现函数,您可以使用类似于下面的宏来实现简单的返回类型。

#define A_FUNC(ret, name) \
template <class T1, class T2> \
ret A<T1, T2>::name

A_FUNC(void, foo)() const {}

A_FUNC(int, bar)()  const { return 0;}

但是,对于复杂的返回类型,该逻辑将崩溃。假设你有:

template <class T1, class T2> 
class A
{   
    public:
        explicit A() {}
        void foo() const;
        int bar() const;
        char const* (*)(int, int) bar2() const;
};  

我不知道是否有办法将该返回类型捕获为宏参数。

使用

A_FUNC((char const* (*)(int, int)), bar2)()  const { return NULL;}

导致各种编译器错误。

关于c++ - 使用 typedef 将多个模板类合并为一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30875683/

相关文章:

c++ - 类型和相关名称

c++ - 指针容器模板设计

c++ - C++-17 中专门化的模式匹配中 lambda 的拆分函数签名

c++ - 在自定义容器类上反转基于范围的 for 循环

c++ - 将 vector 传递给c++中的线程函数

objective-c - 错误 : expected expression on line using #defined constant

c - C 中的宏问题

scala - 根据类型参数生成函数

c++ - 使用 "Curiously Recurring Template Pattern"的增量数

c++ - 将 Void 作为指针传递给类,然后执行其内容