final class
-
finale klasse
folgender source compiliert unter VC++ 2012 ohne probleme:
template<class T> class is_final final : public T { }; class test { public: test(void) : value(0) { } int value; }; typedef is_final<test> ftest; class test2 : public ftest { }; template<class T> bool is_final_check(const T &t) { return false; } template<class T> bool is_final_check(const is_final<T> &isf) { return true; } int main(int param_count, char **param) { ftest t2; test2 t; std::cout << t.value << std::endl; std::cout << is_final_check(12) << std::endl; std::cout << is_final_check(t2) << std::endl; return 0; }sollte er bei der klasse test2 nicht meckern, das eine ableitung nicht moeglich ist ?
Meep Meep
-
Meep Meep schrieb:
sollte er bei der klasse test2 nicht meckern, das eine ableitung nicht moeglich ist ?
ja.
Versuchst du so etwas?
#include <type_traits> template <typename T> struct is_final_detail { template <typename U> struct helper : U {}; typedef char& no; typedef char(&yes)[2]; template <typename U> static yes test(...); template <typename U> static no test(int helper<U>::*); static constexpr bool value = sizeof(test<T>((int T::*)0))==sizeof(yes); }; template <typename T> struct is_final : std::conditional<std::is_class<T>::value, is_final_detail<T>, std::false_type>::type {}; struct foo {}; struct bar final {}; static_assert( !is_final<int>::value, "" ); static_assert( !is_final<foo>::value, "" ); static_assert( is_final<bar>::value, "" );(funktioniert auch nicht)
-
Ach, ich bin so doof. Hat sich erledigt.
-
template<class T> class is_final final : public T { };Was soll das den heißen? Schreibfehler?
MfG
-
BlauBaer1 schrieb:
template<class T> class is_final final : public T { };Was soll das den heißen? Schreibfehler?
MfG
Wie was soll das heißen? Es soll genau das heißen, was da steht. Wenn es ein Schreibfehler gäbe, würde VS es mit Sicherheit nicht kompilieren.
-
Tut es ja auch!
-
Würde mich auch mal Interessieren, was das final da macht, habe es noch nie so gesehen. Würde mich über eine Erklärung freuen.
MfG
-
n3337 schrieb:
9 Classes
[...]
class-specifier:
class-head { member-specificationopt }
class-head:
class-key attribute-specifier-seqopt class-head-name class-virt-specifieropt base-clauseopt
class-key attribute-specifier-seqopt base-clauseopt
class-head-name:
nested-name-specifieropt class-name
class-virt-specifier:
final
class-key:
class
struct
union
[...]
3 If a class is marked with the class-virt-specifier final and it appears as a base-type-specifier in a base-clause
(Clause 10), the program is ill-formed.
-
yihaaa schrieb:
Würde mich auch mal Interessieren, was das final da macht, habe es noch nie so gesehen. Würde mich über eine Erklärung freuen.
lmgtfy
Explicit overrides and final