Wie am besten Java in C++ Programm umwandeln?



  • Nabend, bevor ich noch lange herumraten muss oder bei der KI nachfrage... Wie sähe das Pendant in C++ zu dieser Main-Methode in Java aus?

      private enum Symbol {
        SLEEP1,
        TARGET1,
        ACTION1,
        ACTION2
      }
    
      public static void main(String[] args) {
        if (args.length == 0) {
          exitApp();
        }
    
        long sleep = 100;
        String target1 = "127.0.0.1";
    
        Map<Integer, Map<Symbol, Integer>> fsm = new HashMap<>();
        fsm.put(
            0,
            Map.of(
                Symbol.SLEEP1, 1,
                Symbol.TARGET1, 2,
                Symbol.ACTION1, 3,
                Symbol.ACTION2, 3));
        fsm.put(
            1,
            Map.of(
                Symbol.TARGET1, 3,
                Symbol.ACTION1, 3,
                Symbol.ACTION2, 3));
        fsm.put(
            2,
            Map.of(
                Symbol.SLEEP1, 3,
                Symbol.ACTION1, 3,
                Symbol.ACTION2, 3));
        fsm.put(
            3,
            Map.of(
                Symbol.ACTION1, 3,
                Symbol.ACTION2, 3));
        List<Runnable> runnables = new LinkedList<>();
        int state = 0;
        for (String arg : args) {
          String[] parts = arg.split("=", 2);
          if (parts.length != 2) {
            exitApp();
          }
          String key = parts[0];
          String value = parts[1];
          switch (key) {
            case "target1" -> {
              if (!fsm.get(state).containsKey(Symbol.TARGET1)) {
                exitApp();
              }
              target1 = value;
              state = fsm.get(state).get(Symbol.TARGET1);
            }
            case "sleep" -> {
              if (!fsm.get(state).containsKey(Symbol.SLEEP1)) {
                exitApp();
              }
              sleep = checkAndParse1(value);
              state = fsm.get(state).get(Symbol.SLEEP1);
            }
            case "a", "b" -> {
              switch (key) {
                case "a" -> {
                  if (!fsm.get(state).containsKey(Symbol.ACTION1)) {
                    exitApp();
                  }
                  String finalTarget = target1;
                  int finalNum = checkAndParse2(value);
                  long finalSleep = sleep;
                  runnables.add(() -> action1(finalTarget, finalNum));
                  runnables.add(() -> action3(finalSleep));
                  state = fsm.get(state).get(Symbol.ACTION1);
                }
                case "b" -> {
                  if (!fsm.get(state).containsKey(Symbol.ACTION2)) {
                    exitApp();
                  }
                  String finalTarget = target1;
                  int finalNum = checkAndParse2(value);
                  long finalSleep = sleep;
                  runnables.add(() -> action2(finalTarget, finalNum, 1000));
                  runnables.add(() -> action3(finalSleep));
                  state = fsm.get(state).get(Symbol.ACTION2);
                }
                default -> exitApp();
              }
            }
            default -> exitApp();
          }
        }
        if (runnables.isEmpty()) {
          exitApp();
        }
        runnables.remove(runnables.size() - 1); // Remove last action
    
        // Run all actions
        runnables.forEach(Runnable::run);
      }
    

    Vermutlich ginge es (viel) einfacher, da C++ ja Funktionspointer kennt?



  • @Lennox Wie wäre es, wenn du es erstmal selbst versuchst?


Anmelden zum Antworten