目前,我有一個CRTP基類,它利用特徵類來確定它的成員函數的返回類型。我一直在玩C++ 11,並且有下面的代碼,它消除了traits類的需要,但需要默認的函數模板參數。有沒有一些方法可以修改這個在Visual Studio 2012中工作,它不支持C++ 11的功能?在crtp基類中延遲成員函數實例化
#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';
}
它支持可變模板參數嗎? –
@litb:不,它不支持可變模板。這是它支持的功能[list](http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx)。 – Joe