, что мой класс содержит такие переменные, как thrust::device_vector<>,
, но все же может быть включен в полный проект?
Вы должны скомпилировать код, содержащий упор, с nv cc. Альтернативы нет. Если вы включите заголовки, которые включают в себя ванильный код C ++ 17 и скомпилируете с помощью компилятора C ++, вы получите ошибки.
Могу ли я каким-то образом объявить переменные класса только в .cu-файле, но не в заголовочном файле?
Вы можете это сделать, и это было бы очевидным решением. Но тогда возникает столь же очевидный вопрос, зачем вам вообще нужна структура в ванильном коде C ++ 17. И если намерение состоит в том, чтобы использовать его в коде C ++ 17, то вы вернулись туда, откуда начали.
Я не вижу альтернативы, кроме рефакторинга вашего кода. Вам либо нужно использовать наследование от общей переносимой структуры со специализациями C ++ и CUDA и каким-то образом скопировать конструкцию или подобное между ними, либо поместить в карантин / деформировать весь код C ++ 17 за пределами кодовых путей CUDA и использовать nv cc как ваш базовый компилятор и скомпилируйте C ++ 17 отдельно с помощью g ++.
Никакое волшебство не может решить эту проблему так, как вы, кажется, себе представляете.