Frage

ich einige Schwierigkeiten haben, uns auf eine Funktion erklärt, dass Verwendungen boost::enable_if : das folgende Stück Code gibt mir einen Compiler-Fehler:

// Declaration
template <typename T>
void foo(T t);

// Definition
template <typename T>
typename boost::enable_if<boost::is_same<T, int> >::type foo(T t)
{
}

int main()
{
    foo(12);
    return 0;
}

Beim Kompilieren, ich einen „mehrdeutig Aufruf foo“ Fehler. Nach der Definition von enable_if, die ‚Typ‘ typedef entspricht void, wenn die Bedingung erfüllt ist, so weit, wie ich die beiden Unterschriften von foo Spiel sehen kann. Warum denkt der Compiler sie verschieden sind, und gibt es einen richtigen Weg, um vorwärts declare foo (vorzugsweise ohne den enable_if Teil Wiederholung)?

Andere Tipps

Das Problem ist, dass die Erklärung und die Definition nicht überein.

Die Lösung besteht darin, dass die Erklärung genau die gleiche Signatur enthalten soll, und die die enable_if Bit.

#include <boost/type_traits/is_same.hpp>
#include <boost/utility/enable_if.hpp>

// Declaration
template <typename T>
typename boost::enable_if<boost::is_same<T, int> >::type foo(T t);

// Definition
template <typename T>
typename boost::enable_if<boost::is_same<T, int> >::type foo(T t)
{
}

int main()
{
    foo(12);
    return 0;
}

Dieses compiles fein auf VC2008.

scroll top