gpt4 book ai didi

c++ - 三元运算符

转载 作者:行者123 更新时间:2023-11-30 03:09:46 25 4
gpt4 key购买 nike

为什么编译器不能专门化这个函数,有没有办法强制他这样做?
我得到的错误:
错误 1 ​​error C2893:无法特化函数模板“未知类型”Ternary::check(bool,Left,Right)'

#include "stdafx.h"
#include <iostream>
#include <string>
using std::cout;
using std::string;

template<int v>
struct Int2Type
{
enum {value = v};
};

template<bool condition,class Left, class Right>
struct Result;


template<class Left, class Right>
struct Result<true,Left,Right>
{
typedef Left value;
};

template<class Left, class Right>
struct Result<false,Left,Right>
{
typedef Right value;
};

struct Ternary
{
template<class Left, class Right>
static Right check_(Int2Type<false>, Left left, Right right)
{
return right;
}

template<class Left, class Right>
static Left check_(Int2Type<true>, Left left, Right right)
{
return left;
}


__Updated__
template<bool Condition,class Left, class Right>
static auto check(Left left, Right right)->
typename Result<Condition,Left,Right>::value
{
return check_(Int2Type<Condition>,left,right);
}

int _tmain(int argc, _TCHAR* argv[])
{
int a = 5;
string s = "Hello";
cout << Ternary::check<false>(a,s);
return 0;
}

最佳答案

我还没有足够的 C++0x 经验,但据我所知:

    decltype(Result<(sizeof(int) == 1),Left,Right>::value)

decltype需要一个表达式,但是 Result<...>::value是一种类型。只需删除 decltype ;

    return check_(Int2Type<condition>,left,right);

condition是一个变量,不能将它用作模板参数。

更新:还有 Int2Type<Condition>又是一种类型。你想传递一个值:Int2Type<Condition>() .

关于c++ - 三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3845517/

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