gpt4 book ai didi

c++ - 确定参数类型

转载 作者:太空宇宙 更新时间:2023-11-04 15:09:28 26 4
gpt4 key购买 nike

是否有可能在编译时反射(reflect)函数参数的类型?

这样

int b = add(3, 6)

将导致模板实例化为

int add(int a, int b) { return a + b }

出于一些然而声明的函数模板

A add(A a, B b) { return a + b }

我不知道模板是否可行,它们似乎并不是为繁重的元编程而设计的。

最佳答案

template<typename T>
T add(T a, T b) { return a + b; }

然后你可以用任何内置类型(int、short、double、float 等)调用它,它会根据你使用的类型在编译时实例化函数 add .

请注意,如果将其拆分为标题/源代码,则会遇到麻烦:

添加.h:

template<typename T>
T add(T a, T b);

添加.cpp:

template<typename T>
T add(T a, T b) { return a + b; }

主要.cpp:

#include "add.h"

int a = 3;
int b = 5;
int i = add(a, b);

当您尝试编译它时,它会在链接时失败。原因如下。

编译 add.obj 不会实例化 add 模板方法——因为它从未在 add.cpp 中调用。编译 main.obj 实例化函数声明——但不是函数体。所以在链接时,它会找不到add方法的定义。

最简单的修复方法是将整个模板函数放在标题中:

添加.h:

template<typename T>
T add(T a, T b) { return a + b; }

然后您甚至根本不需要 add.cpp 文件。

关于c++ - 确定参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5022710/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com