- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Tôi muốn liên kết uuid/guide với chuyên môn về mẫu.
Đoạn mã sau có thể được sử dụng để liên kết uuid với giao diện không phải mẫu (lớp, cấu trúc):
__giao diện __declspec(uuid("CECA446F-2BE6-4AAC-A117-E395F27DF1F8")) ITest {
kiểm tra khoảng trống ảo() = 0;
};
Hướng dẫn GUID = __uuidof(ITest); // OK
Bây giờ tôi có một giao diện theo mẫu
mẫu __giao diện ITemplateTest {
Kiểm tra khoảng trống ảo(T t) = 0;
};
Tôi muốn làm như sau:
Mẫu GUIDGuid = __uuidof(ITemplateTest);
Không thể thêm __declspec(uuid(...)) vào định nghĩa lớp mẫu. Điều này là hiển nhiên vì các chuyên môn khác nhau của một giao diện yêu cầu các uuid khác nhau. Vì vậy, tôi đã cố gắng liên kết uuid với chuyên môn mẫu thông qua:
mẫu<> __giao diện __declspec(uuid("CF4AB938-8CE0-4AB7-A56C-0253B6018C26")) ITemplateTest;
Thật không may, điều này cũng không hoạt động (__uuidof(.) không thành công với "Không có GUID nào được liên kết với đối tượng này").
Có giải pháp nào cho vấn đề của tôi không?
Đây là một ví dụ đầy đủ hơn được thêm vào sau một số câu trả lời:
Giả sử tôi có một thuật toán phức tạp hoạt động trên các loại dữ liệu khác nhau. Để đơn giản, thuật toán "phức tạp" này bình phương một số. Tôi chỉ muốn triển khai thuật toán của mình một lần nên mẫu là lựa chọn phù hợp. Giả sử thêm rằng tôi muốn sử dụng giao diện vì ứng dụng của tôi sử dụng COM.
Vì vậy, đây là một giao diện và một đối tượng được tạo khuôn mẫu thực hiện giao diện này:
mẫu __giao diện ITemplateTest {
ảo T bình phương(T t) = 0;
};
template class CTemplateImplementation : public ITemplateTest {
public:
Hình vuông T ảo(T t) { return t * t };
};
Điều này cho phép làm một cái gì đó như
CTemplateImplementation xDouble;
CTemplateImplementation xFloat;
CTemplateImplementation xInt;
std::cout << xDouble.Square(5.) << std::endl
<< xFloat.Square(5.0f) << std::endl
<< xInt.Square(5) << std::endl;
Bây giờ, hãy giả sử thêm rằng tôi có một đối tượng mẫu khác cũng triển khai một thuật toán rất "phức tạp", sử dụng CTemplateImplementation:
mẫu lớp CSquareAndAddOne {
private:
CTemplateImplementation m_squarer;
public:
T SquareAndAddOne(T t) { return m_squarer.Square(t) + T(1 }
};
Đối tượng này bây giờ có thể được sử dụng theo cách tương tự:
CSquareAndAddOne yDouble;
CSquareAndAddOne yFloat;
CSquareAndAddOne yInt;
std::cout << yDouble.SquareAndAddOne(5.) << std::endl
<< yFloat.SquareAndAddOne(5.0f) << std::endl
<< yInt.SquareAndAddOne(5) << std::endl;
Sự cố phát sinh khi CSquareAndAddOne::SquandAddOne muốn sử dụng chuyên môn CTemplateImplementation của __uuid. Hãy thử như sau:
T SquareAndAddOne(T t) {
Hướng dẫn GUID = __uuidof(m_multiplier);
trả về m_squarer.Square(t) + T(1);
}
Điều này không còn hoạt động vì không có GUID liên kết với m_multiplier. Vậy làm cách nào để bạn chỉ định các hướng dẫn cho các triển khai khác nhau của CTemplateImplementation (ba trong trường hợp này) mà không trùng lặp mã? Bạn có thể cung cấp một giải pháp hoàn chỉnh? Không thể lấy các lớp khác nhau cho các loại khác nhau từ CTemplateImplementation vì việc sử dụng cách gõ chính xác trong CSquareAndAddOne không còn có thể được kiểm soát bằng các tham số mẫu.
câu trả lời hay nhất
Tôi đã thử một số phép thuật khởi tạo rõ ràng và nó hoạt động tốt (ít nhất là trong VS2008 SP1):
template __interface ITemplateTest { void Test(T t };
mẫu __interface ITemplateTest; // Khởi tạo rõ ràng
mẫu __interface __declspec(uuid("CF4AB938-8CE0-4AB7-A56C-0253B6018C26") ITemplateTest; // Lặp lại việc khởi tạo rõ ràng với liên kết uuid
GUID guid = __uuidof(ITemplateTest); // Hãy tận hưởng :-)
Có vẻ như vấn đề ban đầu là __declspec
Đang cố gắng chuyên môn hóa một lớp học Hướng dẫn được gán cho nó trước khi khởi tạo thực tế.
Về C++ Microsoft: Cách liên kết uuid/guid với chuyên môn mẫu, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/11966892/
Tôi đang cố gắng xây dựng một lớp mẫu Fod mẫu lớp Fod { ... }; Nó sẽ chứa một lớp bên trong có giá trị tĩnh const int Tại cho biết chỉ mục của các tham số mẫu (S0 là 0, S
Tôi gặp khó khăn khi hiểu phần cuối cùng của Python in a Nutshell (in đậm) Các phương thức cho mỗi trường hợp Một phiên bản có thể có bi dành riêng cho phiên bản
Tôi cần biểu thức chính quy cho trường mật khẩu. Yêu cầu là: Mật khẩu phải có độ dài từ 8 đến 20 ký tự và phải chứa ít nhất một chữ cái và một số cũng như các ký tự đặc biệt _+ từ !@#$%^&*(). không nên bắt đầu bằng các ký tự đặc biệt mà tôi đã thử ^(?=.*[a-
Tôi có trường nhập loại C. THAM SỐ lv_sep LOẠI c. Trường lv_sep chỉ nên chấp nhận các ký tự đặc biệt. Bạn có thể giúp tôi làm thế nào để đưa ra hạn chế này? Câu trả lời hay nhất bạn có thể tìm thấy tại AT-SELECTIO
Tôi nhớ PaulP đã chỉ ra một thủ thuật hay để viết tắt các chuỗi @specialized dài lặp đi lặp lại, nhưng tôi không thể tìm thấy bài đăng gốc. Giống như tôi có đặc điểm Foo[@specialized(Int, Float, Doubl
Tôi có một đặc điểm và cách triển khai như thế này: trait Foo[A] { def bar[B >: A: Ordering]: Foo[B] } class FooImpl[A]( val a: A, v
Trong Sas9, làm cách nào để thay thế tất cả các lựa chọn của tôi bằng dấu gạch dưới, \/ hoặc dấu cách và các ký tự đặc biệt khác? Giải pháp trong bước dữ liệu hoặc trong hàm macro sẽ thực hiện được thủ thuật, tôi chỉ đang tìm cách để thực hiện điều đó. Cảm ơn vì câu trả lời hay nhất Bạn có thể sử dụng P tích hợp SAS
Mục đích của pragma CHUYÊN NGÀNH là tạo ra một phiên bản cụ thể hơn của hàm. Tôi có hàm AdaptBlocks::Int -> BlocksField a -> Maybe (BlocksField a
Tôi cố gắng xây dựng những thứ sau bằng cách sử dụng gcc 10 -std=gnu++20 -fconcepts: template class MyClass{ T a };
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭11 年前。 Improve th
Tôi có thể tìm danh sách các ký tự được phép trong tên tệp ở đâu (tùy thuộc vào hệ điều hành)? (Ví dụ: trên Linux, ký tự : được phép sử dụng trong tên tệp, nhưng trên Windows thì không) Câu trả lời hay nhất Bạn nên bắt đầu với Wikipedia Filenam
Tôi có hàm powershell sau Function Test { Param ( [Parameter()] [strin
Tôi có hàm powershell sau Function Test { Param ( [Parameter()] [strin
Tôi có hai ma trận vuông A và B. Mỗi cái đều có số 1 hoặc số 0. Một ví dụ được hiển thị bên dưới A id kênh abc 1 1 1 1 2 1 0 1 3 1 0 0 B id cha
Có thể "chuyên biệt hóa" một đối tượng cơ sở thành một đối tượng dẫn xuất không? Ví dụ: class base{... base(...) : ... {}//cả hai đều có hàm tạo riêng
Tôi có hai vòng tròn được kết nối với nhau như thế này: Tôi có một điểm bên trong hình mà từ đó tôi muốn chiếu ánh sáng lên hình đó theo một hướng. Để lấy vị trí đánh máy của cạnh của hình. Ý tưởng đầu tiên của tôi là kết nối 2 đoạn thành 2 vòng tròn để chuyển đổi ánh sáng. nếu không thành công
Trong dự án Java của tôi, tôi có hệ thống phân cấp lớp/giao diện sau: giao diện công cộng ProductSearcher { Set search(String reque
Có thể xác định tình trạng quá tải chuyên biệt này mà không cần đưa ra chữ ký khớp chính xác với việc triển khai không? on(eventName: string, cb: Function); on(eventName: "view", cb: (arg
Tôi vô tình phát hiện ra rằng không thể biên dịch def foo(f: Int => Unit) {} def foo(f: Long => Unit) {} vì phương thức foo được xác định hai lần.
Trong ví dụ sau, tại sao foo(f) được gọi là mơ hồ? Tôi biết rằng tình trạng quá tải thứ hai cũng hoạt động với P ==() , nhưng tại sao tình trạng quá tải đầu tiên không được coi là chuyên biệt hơn và do đó phù hợp hơn? func foo(_ f: () -> R) { prin
Tôi là một lập trình viên xuất sắc, rất giỏi!