Có một thủ thuật tinh vi cho chuyên môn hóa mẫu để tôi có thể áp dụng một chuyên môn cho basic POD
(khi tôi nói POD cơ bản tôi không đặc biệt muốn cấu trúc POD (nhưng tôi sẽ thực hiện)).Chuyên môn mẫu cho POD cơ bản chỉ
template<typename T>
struct DoStuff
{
void operator()() { std::cout << "Generic\n";}
};
template<>
struct DoStuff</*SOme Magic*/>
{
void operator()() { std::cout << "POD Type\n";}
};
Hoặc tôi có phải viết chuyên môn cho từng loại được cài sẵn không?
template<typename T>
struct DoStuff
{
void operator()() { std::cout << "Generic\n";}
};
// Repeat the following template for each of
// unsigned long long, unsigned long, unsigned int, unsigned short, unsigned char
// long long, long, int, short, signed char
// long double, double, float, bool
// Did I forget anything?
//
// Is char covered by unsigned/signed char or do I need a specialization for that?
template<>
struct DoStuff<int>
{
void operator()() { std::cout << "POD Type\n";}
};
Kiểm tra đơn vị.
int main()
{
DoStuff<int> intStuff;
intStuff(); // Print POD Type
DoStuff<std::string> strStuff;
strStuff(); // Print Generic
}
Ok, tôi tò mò - Bạn muốn làm gì nếu "công cụ" bạn muốn thực hiện việc triển khai chưa thực hiện khác với các loại POD? –
Tôi đang sử dụng boost :: mpl. Đối với lớp như các đối tượng, tôi cần phải đăng ký một hành động thao túng đối tượng lớp (và đăng ký hành động cho tất cả các thành viên của nó). Đối với các đối tượng POD bình thường, tôi có một hành động đơn giản hơn nhiều sẽ được đăng ký để thực hiện hành động trên đối tượng. –