7
Nói rằng tôi có một khái niệm:Làm thế nào để lấy kiểu từ khái niệm?
template < typename Group > concept bool GGroup =
requires() { typename Group::Inner; };
Làm thế nào tôi có thể lấy loại Inner
khi sử dụng các khái niệm dưới hình thức ngắn?
void doSomething(const GGroup& group)
{
// an ugly alternative
using Inner = typename std::decay_t<decltype(group)>::Inner;
//// could be something like:
// using Inner = GGroup::Inner;
// or
// using Inner = underlyingtype(GGroup)::Inner;
}
Điều gì về việc sử dụng biểu mẫu dài: 'template void doSomething (const Group & group) {... Group :: Inner ...}'? –
ach
@AndreyChernyakhovskiy Có, nhưng vấn đề là làm điều đó ở dạng ngắn hơn. – Vahagn
Sau đó, bạn đánh bại mục đích của riêng bạn. Bạn không thể sử dụng biểu mẫu ngắn (điểm chính là loại trừ tham chiếu không cần thiết đối với loại thực tế) và tham khảo loại thực tế cùng một lúc. Đối với các nhà thiết kế ngôn ngữ, một cái gì đó như 'GGroup :: Inner' không phải là một lựa chọn vì nó sẽ không rõ ràng. Hãy xem xét: nếu bạn có 'void doSomething (const GGroup & group1, const GGroup & group2)' nó sẽ tương đương với 'template void doSomething (const Group1 & group1, const Group2 & group2)'. 'GGroup' nào sau đó sẽ đề cập đến? –
ach