Nasıl C bir işlev adı için bir takma ad atamak mı ?
Kolay bir türü için yeni bir isim, bir değişken veya bir ad alanı oluşturabilirsiniz. Ama nasıl bir işlev için yeni bir ad atamak mı? Örneğin, adını kullanmak istiyorum printf
holler
. define açıktır... başka yol yok mu? #
Çözüm:
#define holler printf
void (*p)() = fn; //function pointer
void (&r)() = fn; //function reference
inline void g(){ f(); }
CEVAP
Farklı yaklaşım vardır:
Olmayan aşırı yüklenmiş fonksiyonlar basitçe kullanabilirsiniz olmayan şablon: C 11
const auto& new_fn_name = old_fn_name;
Bu işlev, birden çok aşırı varsa
static_cast
kullanmanız gerekir:const auto& new_fn_name = static_cast<OVERLOADED_FN_TYPE>(old_fn_name);
Örnek: fonksiyon 2 aşırı
std::stoi
vardırint stoi (const string&, size_t*, int); int stoi (const wstring&, size_t*, int);
Eğer ilk sürümü için bir isim yapmak istiyorsanız aşağıdaki kullanmanız gerekir:
const auto& new_fn_name = static_cast<int(*)(const string&, size_t*, int)>(std::stoi);
Not:tüm aşırı yüklenmiş versiyonları gibi bu işlevde diğer iş yapmak için bir yolu yoktur, her zaman istediğiniz belirtmeniz gerekir.
C 14 ile daha da
constexpr
şablon değişkenleri ile gidebilirsiniz. Bu şablonu esas alan diğer işlevleri sağlar:template<typename T> constexpr void old_function(/* args */); template<typename T> constexpr auto alias_to_old = old_function<T>;
Ayrıca, bir işlevi var C 11 ile başlayan diğer üye işlevleri sağlar
std::mem_fn
denir. Bakın aşağıdaki örnek:struct A { void f(int i) { std::cout << "Argument: " << i << '\n'; } }; A a; auto greet = std::mem_fn(&A::f); // alias to member function // prints "Argument: 5" greet(a, 5); // you should provide an object each time you use this alias // if you want to bind an object permanently use `std::bind` greet_a = std::bind(greet, a, std::placeholders::_1); greet_a(3); // equivalent to greet(a, 3) => a.f(3);
Nasıl bir işlev adı için Python ile bi...
Nasıl slideDown (veya göstermek) Kulla...
Nasıl düz İngilizce, seçmelerde açıkla...
Nasıl bir HTML kabı için birden fazla ...
Nasıl bir kurucu veya bir işlev için u...