テンプレートペアに価値があるかどうかを確認する方法

Dec 01 2020

テンプレートスニペットを使用してC ++でトライ構造体をコーディングしています。

pair<char,T>

ルートの2番目の値が設定されていないかどうかを確認したいメソッドvoidempty()があります(値はデフォルトのコンストラクター値と等しいか、詳細:値は他のペアタイプを格納します)。デフォルトのコンストラクターがデータ型intに0を適用することは知っていますが、テンプレート内でこれを確認するにはどうすればよいですか?

別の投稿はこれに言及しました:return root == new Trie <char、T>()(unknown == operatorへのデュオの失敗)

前もって感謝します

回答

1 largest_prime_is_463035818 Dec 01 2020 at 01:04

Astd::pairのメンバーは、「設定されていない」ことはできません。

std::optionalオプションの値をモデル化するために使用できます。


「...値はデフォルトのコンストラクターと同じです...」

もちろん、現在の値が最初の値と等しいかどうかを確認できます。

std::pair<int,int> x;
if (x.first == 0) {
    std::cout << "value of x.first is that of a default constructed std::pair<int,int>";
}

またはstd::pair<int,T>:の2番目のメンバーの場合

if (x.second == T{} ) {
    std::cout << "second has same value as a default constructed T";
}

完全な例:

#include <iostream>
#include <utility>

template <typename T>
bool check_if_default_second(const std::pair<int,T>& p) {
    return p.second == T{};
}


int main() {
    std::pair<int,int> p;
    std::cout << check_if_default_second(p);
}