2017-01-06 9 views
1

このSFINAEのコンパイラに問題があります。このエラーを起こす前にテンプレートを解決しないように見えます。ここ は、コードは次のとおりです。クラス<template-parameter-1-2>のデフォルト引数の再定義

template<typename Sig, typename = typename std::enable_if<!std::is_pointer<Sig>::value>::type> 
class GLFunction { /* class def... */ }; 

template<typename FP, typename = typename std::enable_if<std::is_pointer<FP>::value>::type> 
class GLFunction { /* class def... */ }; 

あなたは、私がこれを達成する方法を知っていますか?

Thx。

+0

いいえ。コードは同じテンプレートを異なる定義で2回定義しようとします。それは有効ではありません。同じことを2回定義することはできません。特に2つの異なる方法ではできません。 –

答えて

3

エラーを読んで、何が間違っているかを示します。デフォルトの引数を再定義することはできません。一度しか指定しないでください。

あなたは何をしようとしていますか?なぜ同じテンプレートを2回定義したのですか?それらのうちの1つは、部分的な専門化を意図していますか?

なぜあなたは単純な方法でこれを行うことはできませんか?

// Primary template, with default argument: 
template <typename Sig, bool = std::is_pointer<Sig>::value> 
class GLFunction { /* class def... */ }; 

// Partial specialization used for pointers: 
template <typename FP> 
class GLFunction<FP, true> { /* class def... */ }; 
+0

これは同じテンプレートではありません。もう1つはSFINAEで失敗するはずですが、もう1つは通過します(記号を見てください)。だから、私がやろうとしているのは、最後にはそれらのうちの1つしかないということです。 – 007azzag45

+0

最後が見えませんでした。良い考えです。 – 007azzag45

+1

あなたのサンプルコードに 'template'キーワードがありませんでした。 – skypjack

関連する問題