Как написать макрос, который может отправлять функции шаблона с параметром шаблонаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как написать макрос, который может отправлять функции шаблона с параметром шаблона

Сообщение Anonymous »

У меня есть шаблонный класс Cache, в нем есть такие методы, как Get, Put, Evict и CacheEvictStrategy (FIFO, LRU, LFU).

Код: Выделить всё

template
class Cache

template
void Cache::Get(uint32_t num_query, KeyType* queries, ElemType* result, bool* find_mask){
}
Поскольку три типа CacheEvictStrategy имеют много общего кода, я пишу наиболее распространенный код в Cache::Get, он будет вызывать другую шаблонную функцию GetInternal, которая будет действовать по-другому в соответствии с различными стратегиями CacheEvictStrategy.

Код: Выделить всё

template
__global__ void GetInternal(uint32_t num_query, KeyType* queries, ElemType* result, bool* find_mask)

template
void Cache::Get(uint32_t num_query, KeyType* queries, ElemType* result, bool* find_mask){
// common logic
GetInternal(num_query,queries,result,find_mask);
}
Поскольку стратегия определяется во время выполнения. Я хочу написать макрос для его отправки. Но у меня также есть функции Put, Evict, я хочу написать марку, которая принимает функцию и CacheEvictStrategy. Но только я знаю CacheEvictStrategy, могу ли я получить функция шаблона, поскольку CacheEvictStrategy является параметром шаблона. Я не хочу писать макрос для каждой функции, как показано ниже:

Код: Выделить всё

#define DISPATCH_GET(strategy,grid,block,...){ \
switch(strategy){
case LRU:
GetInternal(__VA__ARGS__) \
....                       \
}                          \

#define DISPATCH_PUT
#define DISPATCH_EVICT

Есть ли способы решить мою проблему? Буду признателен, если кто-нибудь даст мне совет :)


Подробнее здесь: https://stackoverflow.com/questions/781 ... e-paramete
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»