Pozdrawiam
Piotr Wyderski
w _ograniczonym_ zakresie da siďż˝ :
#include <cstdio>
class A
{
public:
void testme(int) {}
};
class B
{
public:
void testme(int) {}
};
class C : public B
{
};
class D
{
};
class E
{
void testme(int) {}
};
template <typename Type>
class test_testme
{
typedef char Y;
struct N {char dummy[2];};
// Typ funkcji tutaj ...
template <void (Type::*t)(int)>
struct holder_Y {typedef Y type;};
// ... nazwa tutaj
template <typename U>
static typename holder_Y<&U::testme>::type test(U*);
template<typename U>
static N test(...);
public:
enum {result = sizeof(test<Type>((Type*) NULL)) == sizeof(Y)};
};
int main()
{
std::puts(test_testme<A>::result ? "test_testme<A>" : "");
std::puts(test_testme<B>::result ? "test_testme<B>" : "");
std::puts(test_testme<C>::result ? "test_testme<C>" : "");
std::puts(test_testme<D>::result ? "test_testme<D>" : "");
// std::puts(test_testme<E>::result ? "test_testme<E>" : "");
}
> w _ograniczonym_ zakresie da siďż˝ :
[ciach] -- po prostu genialne, dzi�ki wielkie!
Pozdrawiam
Piotr Wyderski
A w�a�ciwie na jakiej zasadzie to dzia�a? :-D
SFINAE na:
static typename holder_Y<&U::testme>::type test(U*);
i specjalizacja wylatuje z listy?
Pozdrawiam
Piotr Wyderski
dok�adnie. To nie jest m�j pomys� :D
B.