gpt4 book ai didi

c++ 从宏到模板

转载 作者:太空狗 更新时间:2023-10-29 20:24:16 24 4
gpt4 key购买 nike

我正在尝试为函数模板更改一些宏(我们有很多)。很多时候,我有以下场景:

#include <iostream>

void function_A( void )
{
std::cout << "function A" << std::endl;
}

void function_B( void )
{
std::cout << "function B" << std::endl;
}

#define FOO( _bar ) \
do { \
/* ... do something */ \
function_##_bar(); \
/* ... do something */ \
} while( 0 )

int main()
{
FOO( A );
FOO( B );
}

如何将 FOO 表达为函数模板并获得相同的结果?

我的想法是这样的:

template < ??? _bar >
void foo()
{
// somehow link function_X and _bar
}

性能是必须的!!

提前致谢。

最佳答案

您可以像 Zenith 的回答那样使用 case 语句,但您可以在编译时使用这样的模板来完成:

enum class FunctionOverload
{
A, B
};

template <FunctionOverload T>
void function();

template<>
void function<FunctionOverload::A>()
{
std::cout << "function A" << std::endl;
}

template<>
void function<FunctionOverload::B>()
{
std::cout << "function B" << std::endl;
}

template <FunctionOverload T>
void foo()
{
//do stuff
function<T>();
//do more stuff
}

int main()
{
foo<FunctionOverload::A>();
foo<FunctionOverload::B>();
}

关于c++ 从宏到模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28881221/

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