Derleme süresinde argümanlarından birinin değerinin bilinmesi/bilinmemesi (şablonun gerçekte derlenmesi ve çalıştırılmasından önce) için şablon işlevinin nasıl özelleştirilmesi gerekir?Bir değişkenin değerinin derleme zamanında bilinmesi/bilinmemesi konusunda uzmanlık edin
Henüz ne olduğunu anlayamıyorum.
Fikir 1:
#include <type_traits>
#include <iostream>
int main(void){
int a; //value of a is not known at compile time
bool b = (a == a); //value of b is known at compile time.
std::is_assignable< constexpr bool, bool >::value
}
//g++ magic.cpp -std=c++14
//error: wrong number of template arguments (1, should be 2)
// std::is_assignable< constexpr bool, bool >::value
Fikir 2:
#include <type_traits>
#include <iostream>
int main(void){
const int a=1;
int b = (a == a);
std::cout << __builtin_constant_p (a) << std::endl;
std::cout << __builtin_constant_p (b) << std::endl;
}
//prints 0 and 0.
neden downvote? "bu yapılamaz" kabul edilebilir bir cevaptır. –
Seni doğru anladıysam, bu durum constexpr'de aşırı yüklenmeyi gerektirir. - [Yapılamaz.] (Http://stackoverflow.com/a/33192804/1968) –
@Konrad Rudolph. Cevabını doğru okuduğumda, bir fonksiyonun "constexpr" argümanına sahip olamayacağını söyler. "Constexpr" 'ı yeniden tanımlamak yerine, ya da işe yarayan herhangi bir yol varsa, özelleşmeyi özelliğe göre düşünürüm. –