मैं IsLast
टाइप गुणों को लिखने का प्रयास करता हूं यह जांचने के लिए कि std::tuple
में दिया गया कोई अंतिम प्रकार है, लेकिन नीचे दिया गया कोड संकलित नहीं करता है। मुझे पता है कि इसके आसपास कैसे जाना है, लेकिन मुझे उत्सुकता है कि संकलक इसे क्यों पसंद नहीं करता है। मुझे लगता है कि वैरिएड-टेम्पलेट के विशेषज्ञता पर कुछ नियम होना चाहिए जो मुझे पता नहीं है। https://godbolt.org/g/nXdodxसी ++ टेम्पलेट आंशिक विशेषज्ञता: मैं आखिरी प्रकार में विविधता-टेम्पलेट में क्यों नहीं मिल सकता?
त्रुटि संदेश::
चेतावनी: वर्ग टेम्पलेट आंशिक विशेषज्ञता टेम्पलेट पैरामीटर नहीं कर सकते हैं शामिल हैं
error: implicit instantiation of undefined template 'IsLast<std::tuple<std::__cxx11::basic_string<char>, int>, int>'
वहाँ भी विशेषज्ञता घोषणा पर एक चेतावनी है
कोड पर है घटाया जाना; इस आंशिक विशेषज्ञता
#include <tuple>
#include <string>
/////////This works
template<typename TP, typename T>
struct IsFirst;
template<typename U, typename ...V, typename T>
struct IsFirst <std::tuple<U, V...>, T>
{
enum {value = false};
};
template<typename U, typename ...V>
struct IsFirst <std::tuple<U, V...>, U>
{
enum {value = true};
};
////////This doesn't compile
template<typename TP, typename T>
struct IsLast;
template<typename ...U, typename V, typename T>
struct IsLast <std::tuple<U..., V>, T>
{
enum {value = false};
};
template<typename ...U, typename V>
struct IsLast <std::tuple<U..., V>, V>
{
enum {value = true};
};
int main()
{
using T = std::tuple<std::string, int>;
bool v1 = IsFirst<T, std::string>::value;
bool v2 = IsLast <T, int>::value;
}
मुझे विश्वास है कि विविध टेम्पलेट अंतिम आना चाहिए। – Resurrection
आप किस कंपाइलर और संस्करण और संकलन झंडे का उपयोग कर रहे हैं? सटीक त्रुटि संदेश क्या है? –
क्या आपका मतलब है कि "टाइपनाम ... यू" को आखिरी की तरह ले जाएं? यह अभी भी संकलित नहीं है। टेम्पलेट struct IsLast , टी> { enum {मूल्य = false}; }; –