thể trùng lặp:
using declaration in variadic templatevariadic mở rộng của việc sử dụng-khai
Gần đây tôi đi qua a generic mechanism để kết hợp hai đối tượng chức năng để tạo thành một đối tượng chức năng mới mà cư xử như thể lần đầu tiên hai đã bị quá tải:
template <typename F1, typename F2>
struct overload : public F1, public F2
{
overload(F1 f1, F2 f2) : F1(f1), F2(f2) {}
using F1::operator();
using F2::operator();
};
Tôi đang cố gắng mở rộng ý tưởng này o làm việc cho N đối tượng chức năng, sử dụng mẫu variadic:
template <typename... Fs>
struct overload : public Fs...
{
overload(Fs... fs) : Fs(fs)... {}
using Fs::operator();...
};
Tuy nhiên, GCC phàn nàn về nỗ lực của tôi để làm mở rộng variadic trên sử dụng-khai:
test.cpp:6:24: error: parameter packs not expanded with '...':
using Fs::operator();...
^
test.cpp:6:24: note: 'Fs'
test.cpp:6:26: error: expected unqualified-id before '...' token
using Fs::operator();...
^
Tôi đã thử một số biến thể, chẳng hạn như:
using Fs::operator()...;
và
using Fs...::operator();
nhưng không phải là lừa.
Có thể thực hiện việc này không?
Lưu ý rằng loại lớp có toán tử chuyển đổi, ví dụ: kiểu con trỏ hàm (một hàm gọi thay thế) là một kiểu functor và chưa tương thích với một cơ chế như vậy. Nó không quan trọng quá nhiều bởi vì đó là kỳ lạ, nhưng nó là một chút bực bội không hoàn toàn chung chung (TTBOMK). –
[Điều này] (http://stackoverflow.com/questions/7870498/using-declaration-in-variadic-template) có thể hữu ích (nếu không phải là câu trả lời, ít nhất là cho những gì đã được thử). –
@Luc: Không phải là bản sao trực tiếp? Đã bỏ phiếu để đóng thành một. – Xeo