যেহেতু ধারণাগুলি সংকলন-কাল পূর্বাভাস হিসাবে সংজ্ঞায়িত করা হয়েছে, তাই কি ভবিষ্যদ্বাণীগুলি সংকলন-কালীন অ্যালগরিদমের জন্য পুনরায় ব্যবহার করা সম্ভব? উদাহরণস্বরূপ, টুপলে সমস্ত প্রকারের ধারণার সাথে মিল রয়েছে কিনা তা খতিয়ে দেখা সম্ভব? আমি যতদূর দেখেছি কোনওভাবেই কোনও ফাংশনে কোনও ধারণা দেওয়া সম্ভব নয়, কোন ধরণের ক্ষেত্রে এই ক্ষেত্রে টেমপ্লেটগুলি ব্যবহার করে আমাকে ফিরে আসে।
#include <type_traits>
template<typename T>
concept FloatLike = std::is_same_v<T, float>;
struct IsFloat
{
template<typename U>
constexpr static bool test()
{
return FloatLike<U>;
}
};
template<typename Predicate, typename... T>
constexpr bool all_types()
{
return (Predicate::template test<T>() && ...);
}
int main()
{
static_assert(all_types<IsFloat, float, float>());
static_assert(!all_types<IsFloat, float, int>());
}
আমি যা করতে চাই তা হ'ল এরকম কিছু, সুতরাং ধারণাটি ব্যবহার করতে সক্ষম হওয়ার জন্য আমাকে সর্বদা আবদ্ধ করতে হবে না:
template<concept Predicate, typename... T>
constexpr bool all_types()
{
return (Predicate<T> && ...);
}
int main()
{
static_assert(all_types<FloatLike, float, float>());
static_assert(!all_types<FloatLike, float, int>());
}
এর কাছাকাছি যাওয়ার কোনও উপায় আছে কি?
all_types()
... &&
return (... && Predicate::template test<Ts>());