gpt4 book ai didi

c++ - 延迟crtp基类中的成员函数实例化

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:59:40 28 4
gpt4 key购买 nike

目前,我有一个 CRTP 基类,它利用特征类来确定其成员函数的返回类型。我一直在玩弄 C++11 并具有以下代码,它消除了对 traits 类的需要,但需要默认函数模板参数。有什么方法可以修改它以在不支持 C++11 的该功能的 visual studio 2012 中工作?

#include <iostream>

using namespace std;

template<typename T, typename Ignore>
struct ignore { typedef T type; };

template<typename T>
struct A
{
template<class IgnoredParam = void>
auto foo() -> decltype(declval<typename ignore<T*, IgnoredParam>::type >()->foo_impl())
{
return static_cast<T*>(this)->foo_impl();
}
};

struct B : public A<B>
{
int foo_impl() { return 0;}

};

int main()
{
B b;
int i = b.foo();
cout << i << '\n';
}

最佳答案

你可以简单地使用

decltype(declval<T>()->foo_impl())

作为延迟返回类型。

关于c++ - 延迟crtp基类中的成员函数实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10966031/

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