#include <type_traits> #include <iostream> struct S { void f() { std::cout << "invoked non-cv-qualified S.f()" << std::endl; } void f() const { std::cout << "invoked const S.f()" << std::endl; } void f() volatile { std::cout << "invoked volatile S.f()" << std::endl; } void f() const volatile { std::cout << "invoked const volatile S.f()" << std::endl; } }; template <class T> void invoke() { T t; ((T *)&t)->f(); } int main() { invoke<S>(); invoke<std::add_const<S>::type>(); invoke<std::add_volatile<S>::type>(); invoke<std::add_cv<S>::type>(); }
根據不一樣的變量類型調用不一樣的函數.ios