далее использовать определенный CASE в том же SELECT, что и переменная

Предполагая, что мы говорим о перегрузке operator << для всех классов, полученных из std::ostream для обработки класса Matrix (а не для перегрузки << для класса Matrix), имеет смысл объявить функция перегрузки вне пространства имен Math в заголовке.

Используйте функцию friend только в том случае, если функциональность не может быть достигнута через общедоступные интерфейсы.

Matrix.h

namespace Math { 
    class Matrix { 
        //...
    };  
}
std::ostream& operator<<(std::ostream&, const Math::Matrix&);

Обратите внимание, что перегрузка оператора объявляется вне пространства имен.

Matrix.cpp

using namespace Math;
using namespace std;

ostream& operator<< (ostream& os, const Matrix& obj) {
    os << obj.getXYZ() << obj.getABC() << '\n';
    return os;
}

С другой стороны, если ваша функция перегрузки делает нужно сделать другом, т. е. нуждается в доступе к частным и защищенным членам.

Math.h

namespace Math {
    class Matrix {
        public:
            friend std::ostream& operator<<(std::ostream&, const Matrix&);
    };
}

Вам нужно приложить определение функции блоком пространства имен, а не просто using namespace Math;.

Matrix.cpp

using namespace Math;
using namespace std;

namespace Math {
    ostream& operator<<(ostream& os, const Matrix& obj) {
        os << obj.XYZ << obj.ABC << '\n';
        return os;
    }                 
}
0
задан Yogesh Sharma 17 January 2019 в 13:21
поделиться

2 ответа

Вы хотите что-то подобное:

select *
from . . .  cross apply
    ( values (case when . . .
                   then . . . 
                   else . . .
              end) 
    ) tt (test)
where tt.test = 'X'
0
ответ дан Yogesh Sharma 17 January 2019 в 13:21
поделиться

Вы можете заключить запрос в подзапрос и поместить предложения SELECT и WHERE за его пределы:

SELECT a, b, c, test
FROM (
    SELECT a, b, c, CASE
        WHEN ...
        WHEN ...
    END AS test
    FROM ...
) AS sq
WHERE sq.test = 'something'

В идеале вам следует избегать case в предложении where.

0
ответ дан Salman A 17 January 2019 в 13:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: