[英]Partial C++ template specialization in dependent project
假設我有一個庫和多個依賴於該庫的項目。 庫頭已經有一些部分類特化。 我想允許每個依賴項目覆蓋自己的部分特化。 出於性能原因,我需要靜態地實現這一點。 下面是一些簡化的代碼。
圖書館代碼:
template <class A, class B, class Enable=void>
struct Widget;
struct Foo
{
};
template <class B>
struct Widget<Foo, B>
{
};
用戶代碼:
template <class B>
struct DoSpecialize;
template <class B>
struct Widget<Foo, B, enable_if< DoSpecialize<B> >::type
{
};
這里的問題是我們最終得到了相同專業化的多個定義。 我想我們需要一個disable_if<>
。 我們怎么能避免這種情況?
我建議通過分離層來解決它。 該庫具有自己的特化,用戶可以根據需要覆蓋它們。 如果這是可以接受的,則以下是庫代碼:
namespace impl
{
template <class A, class B, class Enable=void>
struct Widget;
}
template <class A, class B, class Enable=void>
struct Widget : impl::Widget< A, B > {};
struct Foo
{
};
namespace impl
{
template <class B>
struct Widget<Foo, B>
{
};
}
並且用戶代碼保持原樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.