[英]Q: Template specialization with parameter pack
我會直接回答這個問題。
我們有模板專業化:
class TestClass
{
public:
template<typename T>
static T fn(const T& a);
}
// OK
template<typename T>
T TestClass::fn(const T& a)
{
// ... magic for any type here ...
}
// OK
template<>
int TestClass::fn(const int& a)
{
// ... magic for int type here ...
}
一切都好。 但是,如果我想在 function 中添加參數包怎么辦?
class TestClass
{
public:
template<typename T, typename... Args>
static T fn(const T& a, Args&& ...b);
}
// OK
template<typename T, typename... Args>
T TestClass::fn(const T& a, Args&& ...b)
{
// ... magic for any type here ...
}
// Error
template<typename... Args>
int TestClass::fn(const int& a, Args&& ...b)
{
// ... magic for int type here ...
}
Visual Studio 給出錯誤 E0147。 如果不向 class 添加新的 function ,我該如何做到這一點?
在此先感謝您的幫助!
祝你今天過得愉快!
在你的第一個例子中
template<>
int TestClass::fn(const int& a)
{ /* ... */ }
您擁有完整的專業知識,C++ 模板函數/方法允許
但是,鑒於聲明
template<typename T, typename... Args>
static T fn(const T& a, Args&& ...b);
你的第二個例子
template<typename... Args>
int TestClass::fn(const int& a, Args&& ...b)
{ /* ... */ }
成為部分專業化,這對於 C++ 函數/方法是不允許的。
但是您可以使用重載,完全避免專門化,為具有相同名稱的不同模板方法添加聲明。
我是說
class TestClass
{
public:
template <typename T, typename ... Args>
static T fn (T const & a, Args && ... b);
template <typename ... Args>
static T fn (int const & a, Args && ... b);
};
template <typename T, typename ... Args>
T TestClass::fn (T const & a, Args && ... b)
{ /* ... */ }
template <typename ... Args>
int TestClass::fn (int const & a, Args && ... b)
{ /* ... */ }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.