gpt4 book ai didi

c++ - 类成员函数的 decltype

转载 作者:行者123 更新时间:2023-11-30 02:48:49 29 4
gpt4 key购买 nike

此代码无法在 VS2010 中编译:

template < typename A >
class X
{
A& m_a;

public:
X ( A& a ) : m_a ( a ) {}
auto func ( int i ) -> decltype ( m_a ( i ) ) { return ( m_a ( i ) ); } // failing on this line
};

double f ( int a )
{
return static_cast < double > ( a );
}

int main()
{
X < decltype ( f ) > x ( f );
std::cout << x.func(4) << std::endl;
return 0;
}

我得到的错误是:error C2064: term does not evaluate to a function takeing 1 arguments.

编译器似乎认为 m_a 不在 decltype 的范围内。

我该如何解决这个问题?

最佳答案

VS2010 没有完全按照标准指定的方式实现 decltype(公平地说,它比标准的最终版本更旧)。你应该能够通过手工编码的 declval 来解决这个问题:

template < typename A >
class X
{
A& m_a;
static A& simulated_m_a();

public:
X ( A& a ) : m_a ( a ) {}
auto func ( int i ) -> decltype ( simulated_m_a()( i ) ) { return ( m_a ( i ) ); }
};

我刚刚在我的 VS2010 上验证它可以正常工作。

关于c++ - 类成员函数的 decltype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21782846/

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