У меня есть тип со строгим требованием к выравниванию (из-за используемых операций AVX), который больше, чем выравнивание по умолчанию для платформ.Специализирующийся std :: make_shared
Чтобы использовать этот класс проще, я бы хотел специализироваться на std::make_shared
, чтобы всегда использовать подходящий распределитель для этого типа.
Что-то вроде этого:
namespace std{
template<class... Args> inline
auto make_shared<X, Args...>(Args&&... args){
return std::allocate_shared(allocator_type<X, 32>, std::forward<Args>(args)...);
}
}
Мой вопрос, как это допускается стандартом? Будет ли он работать, как ожидалось?
Вы не можете использовать 'alignas'? – dyp
@dyp Нет, или хорошо, да, я уже это сделал, но это не будет работать для распределений кучи из-за [этого] (http://stackoverflow.com/questions/21895038/how-use-alignof-to-force- Расстановка-для-а-кучного-распределения). Эта специализация заключается в том, чтобы выравнивание применялось даже в куче в большинстве распространенных случаев использования. –