簡體   English   中英

依賴項目中的部分C ++模板專業化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM