gpt4 book ai didi

C++函数模板,Int参数问题

转载 作者:行者123 更新时间:2023-11-30 01:29:32 24 4
gpt4 key购买 nike

我很好奇为什么这不起作用:

const int ASSIGN_LEFT = 1;
const int ASSIGN_RIGHT = 2;

template <int AssignDirection>
void map( int& value1, int& value2 );

template<>
void map<ASSIGN_LEFT>( int& value1, int& value2 )
{ value1 = value2; }

template<>
void map<ASSIGN_RIGHT>( int& value1, int& value2 )
{ value2 = value1; }

当我尝试使用此函数时,它会调用我首先定义的模板特化。所以,map<ASSIGN_RIGHT>会打电话map<ASSIGN_LEFT>在上面的代码中,除非我翻转特化的顺序,否则它将始终调用 map<ASSIGN_RIGHT> .

int main()
{
int dog = 3;
int cat = 4;

map<ASSIGN_RIGHT>( dog, cat );
std::cout << "dog= " << dog << ", cat= " << cat << std::endl;
}

输出为

dog= 4, cat= 4

这样做的目的是让我不必编写两个例程来从结构中输入/输出数据。

辅助问题——我想将“int”放在模板参数之上,但显然你不能进行部分特化。很想找到解决这个问题的方法。

提前致谢。

最佳答案

以下绝对有效。它还解决了这样一个事实:您无法通过将函数模板委托(delegate)给专门的类模板来部分专门化函数模板:

enum AssignDirection { AssignLeft, AssignRight };

template <typename T, AssignDirection D>
struct map_impl;

template <typename T>
struct map_impl<T, AssignLeft>
{
static void map(T& x, T& y) { x = y; }
};

template <typename T>
struct map_impl<T, AssignRight>
{
static void map(T& x, T& y) { y = x; }
};

// Only template parameter D needs an explicit argument. T can be deduced.
template <AssignDirection D, typename T>
void map(T& x, T& y)
{
return map_impl<T, D>::map(x, y);
}

关于C++函数模板,Int参数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5785631/

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